(
request,
sitemaps,
section=None,
template_name="sitemap.xml",
content_type="application/xml",
)
| 90 | |
| 91 | @x_robots_tag |
| 92 | def sitemap( |
| 93 | request, |
| 94 | sitemaps, |
| 95 | section=None, |
| 96 | template_name="sitemap.xml", |
| 97 | content_type="application/xml", |
| 98 | ): |
| 99 | req_protocol = request.scheme |
| 100 | req_site = get_current_site(request) |
| 101 | |
| 102 | if section is not None: |
| 103 | if section not in sitemaps: |
| 104 | raise Http404("No sitemap available for section: %r" % section) |
| 105 | maps = [sitemaps[section]] |
| 106 | else: |
| 107 | maps = sitemaps.values() |
| 108 | page = request.GET.get("p", 1) |
| 109 | |
| 110 | lastmod = None |
| 111 | all_sites_lastmod = True |
| 112 | urls = [] |
| 113 | for site in maps: |
| 114 | try: |
| 115 | if callable(site): |
| 116 | site = site() |
| 117 | urls.extend(site.get_urls(page=page, site=req_site, protocol=req_protocol)) |
| 118 | if all_sites_lastmod: |
| 119 | site_lastmod = getattr(site, "latest_lastmod", None) |
| 120 | if site_lastmod is not None: |
| 121 | lastmod = _get_latest_lastmod(lastmod, site_lastmod) |
| 122 | else: |
| 123 | all_sites_lastmod = False |
| 124 | except EmptyPage: |
| 125 | raise Http404("Page %s empty" % page) |
| 126 | except PageNotAnInteger: |
| 127 | raise Http404("No page '%s'" % page) |
| 128 | # If lastmod is defined for all sites, set header so as |
| 129 | # ConditionalGetMiddleware is able to send 304 NOT MODIFIED |
| 130 | if all_sites_lastmod: |
| 131 | headers = {"Last-Modified": http_date(lastmod.timestamp())} if lastmod else None |
| 132 | else: |
| 133 | headers = None |
| 134 | return TemplateResponse( |
| 135 | request, |
| 136 | template_name, |
| 137 | {"urlset": urls}, |
| 138 | content_type=content_type, |
| 139 | headers=headers, |
| 140 | ) |
nothing calls this directly
no test coverage detected