0

我正在使用 Django 的站点地图框架并有一个站点地图索引。我的网址文件如下所示:

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'),
])

这是根据Django 文档中的建议实现的。

问题是我在尝试访问我的站点地图索引时总是得到 404:example.com/sitemap.xml。发生这种情况是因为重定向会自动发生到不存在的example.com/sitemap.xml/ URL 并带有尾部斜杠。

如何避免将斜线附加到 .xml 站点地图文件?我曾尝试使用 re_path 但无济于事。

4

2 回答 2

0

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

from django.urls import re_path
re_path(r'sitemap.xml/?$', views.appmain, {'sitemaps': sitemaps}),
于 2021-07-02T10:48:44.150 回答
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}),
于 2021-07-02T10:40:09.867 回答