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) |