MCPcopy
hub / github.com/django/django / sitemap

Function sitemap

django/contrib/sitemaps/views.py:92–140  ·  view source on GitHub ↗
(
    request,
    sitemaps,
    section=None,
    template_name="sitemap.xml",
    content_type="application/xml",
)

Source from the content-addressed store, hash-verified

90
91@x_robots_tag
92def 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 )

Callers

nothing calls this directly

Calls 11

get_current_siteFunction · 0.90
Http404Class · 0.90
http_dateFunction · 0.90
TemplateResponseClass · 0.90
callableFunction · 0.85
_get_latest_lastmodFunction · 0.85
extendMethod · 0.80
timestampMethod · 0.80
valuesMethod · 0.45
getMethod · 0.45
get_urlsMethod · 0.45

Tested by

no test coverage detected