我正在使用 Django 的站点地图框架并有一个站点地图索引。我的 urls 文件如下所示:
urls = [
path('', include('movies.urls')),
path('', include('accounts.urls')),
...
path('admin/', admin.site.urls),
]
urlpatterns = i18n_patterns(*urls, prefix_default_language=True,)
sitemaps = {
'main': MainSitemap,
'movies': MoviesSitemap,
}
urlpatterns.extend([
path('sitemap.xml', views.index, {'sitemaps': sitemaps}),
path('sitemap-<section>.xml', views.sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
])
这是根据 documentation of Django 中的建议实施的。
问题是我在尝试访问我的站点地图索引时总是得到 404:example.com/sitemap.xml。发生这种情况是因为重定向会自动重定向到不存在的 example.com/sitemap.xml/ 带有尾部斜杠的 URL。
如何避免在 .xml 站点地图文件中附加斜线?我曾尝试使用 re_path 但无济于事。
答案 0 :(得分:0)
您可以通过将此行放在您的设置文件中来防止 Django 自动将斜杠附加到 url:
APPEND_SLASH = False
但我认为更好的方法是使用
path('sitemap.xml/', views.index, {'sitemaps': sitemaps}),
在urlpatterns
。我不确定第二种解决方案是否有效,但应该可以。
更新:
正如在另一个答案中所见,您可以将 re_path
与可选的斜杠一起使用:
from django.urls import re_path
re_path(r'sitemap.xml/?$', views.index, {'sitemaps': sitemaps}),
答案 1 :(得分:0)
您可以使用 re_path
而不是 path
在您的网址模式中使用正则表达式。像这样使用 ?
登录您的网址:
from django.urls import re_path
re_path(r'sitemap.xml/?$', views.appmain, {'sitemaps': sitemaps}),