微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django – 从“sitemap.xml/”中删除尾部斜杠

如何解决Django – 从“sitemap.xml/”中删除尾部斜杠

我正在使用 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 但无济于事。

解决方法

您可以通过将此行放在您的设置文件中来防止 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/?$',
,

您可以使用 re_path 而不是 path 在您的网址模式中使用正则表达式。像这样使用 ? 登录您的网址:

from django.urls import re_path
re_path(r'sitemap.xml/?$',views.appmain,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。