Mercurial > piecrust2
comparison piecrust/serving/server.py @ 711:ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
* Taxonomies are now implemented one or more `TaxonomyGenerator`s.
* A `BlogArchivesGenerator` stub is there but non-functional.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Thu, 26 May 2016 19:52:47 -0700 |
| parents | 33ab9badfd7a |
| children | 4850f8c21b6e e053a27e5aae |
comparison
equal
deleted
inserted
replaced
| 710:e85f29b28b84 | 711:ab5c6a8ae90a |
|---|---|
| 181 raise MultipleNotFound(msg, req_page.not_found_errors) | 181 raise MultipleNotFound(msg, req_page.not_found_errors) |
| 182 | 182 |
| 183 # We have a page, let's try to render it. | 183 # We have a page, let's try to render it. |
| 184 render_ctx = PageRenderingContext(qp, | 184 render_ctx = PageRenderingContext(qp, |
| 185 page_num=req_page.page_num, | 185 page_num=req_page.page_num, |
| 186 force_render=True) | 186 force_render=True, |
| 187 if qp.route.taxonomy_name is not None: | 187 is_from_request=True) |
| 188 taxonomy = app.getTaxonomy(qp.route.taxonomy_name) | 188 if qp.route.is_generator_route: |
| 189 tax_terms = qp.route.getTaxonomyTerms(qp.route_metadata) | 189 qp.route.generator.prepareRenderContext(render_ctx) |
| 190 render_ctx.setTaxonomyFilter(tax_terms, needs_slugifier=True) | |
| 191 | 190 |
| 192 # See if this page is known to use sources. If that's the case, | 191 # See if this page is known to use sources. If that's the case, |
| 193 # just don't use cached rendered segments for that page (but still | 192 # just don't use cached rendered segments for that page (but still |
| 194 # use them for pages that are included in it). | 193 # use them for pages that are included in it). |
| 195 uri = qp.getUri() | 194 uri = qp.getUri() |
| 196 entry = self._page_record.getEntry(uri, req_page.page_num) | 195 entry = self._page_record.getEntry(uri, req_page.page_num) |
| 197 if (qp.route.taxonomy_name is not None or entry is None or | 196 if (qp.route.is_generator_route or entry is None or |
| 198 entry.used_source_names): | 197 entry.used_source_names): |
| 199 cache_key = '%s:%s' % (uri, req_page.page_num) | 198 cache_key = '%s:%s' % (uri, req_page.page_num) |
| 200 app.env.rendered_segments_repository.invalidate(cache_key) | 199 app.env.rendered_segments_repository.invalidate(cache_key) |
| 201 | 200 |
| 202 # Render the page. | 201 # Render the page. |
| 203 rendered_page = render_page(render_ctx) | 202 rendered_page = render_page(render_ctx) |
| 204 | |
| 205 # Check if this page is a taxonomy page that actually doesn't match | |
| 206 # anything. | |
| 207 if qp.route.taxonomy_name is not None: | |
| 208 paginator = rendered_page.data.get('pagination') | |
| 209 if (paginator and paginator.is_loaded and | |
| 210 len(paginator.items) == 0): | |
| 211 taxonomy = app.getTaxonomy(qp.route.taxonomy_name) | |
| 212 message = ("This URL matched a route for taxonomy '%s' but " | |
| 213 "no pages have been found to have it. This page " | |
| 214 "won't be generated by a bake." % taxonomy.name) | |
| 215 raise NotFound(message) | |
| 216 | 203 |
| 217 # Remember stuff for next time. | 204 # Remember stuff for next time. |
| 218 if entry is None: | 205 if entry is None: |
| 219 entry = ServeRecordPageEntry(req_page.req_path, req_page.page_num) | 206 entry = ServeRecordPageEntry(req_page.req_path, req_page.page_num) |
| 220 self._page_record.addEntry(entry) | 207 self._page_record.addEntry(entry) |
