Python Django URL排序

Python Django URL排序,python,django,Python,Django,我正在尝试使用Django sitemap框架来设置站点地图,但在设置站点地图URL时遇到了问题 这是我的项目URL.py from django.contrib.sitemaps.views import sitemap if settings.DEBUG: import debug_toolbar urlpatterns = patterns('', url(r'^debug-toolbar/', include(debug_toolbar.urls)),

我正在尝试使用Django sitemap框架来设置站点地图,但在设置站点地图URL时遇到了问题

这是我的项目URL.py

from django.contrib.sitemaps.views import sitemap

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = patterns('',
        url(r'^debug-toolbar/', include(debug_toolbar.urls)),
    )

    urlpatterns += patterns('',
        url(r'^admin/', include(admin.site.urls)),
        url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}),
        url(r'^robots\.txt$', TemplateView.as_view(template_name="robots.txt")),
        url(r'^500/$', TemplateView.as_view(template_name="500.html")),
        url(r'^404/$', TemplateView.as_view(template_name="404.html")),
        url(r'^', include('hunt.urls')),
    )
else:
    urlpatterns = patterns('',
        url(r'^admin/', include(admin.site.urls)),
        url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}),
        url(r'^robots\.txt$', TemplateView.as_view(template_name="robots.txt")),
        url(r'^500/$', TemplateView.as_view(template_name="500.html")),
        url(r'^404/$', TemplateView.as_view(template_name="404.html")),
        url(r'^', include('hunt.urls')),
    )
这是我的搜索应用程序url.py

urlpatterns = patterns('hunt.views',
    url(r'^$', top100, name='top100'),
    url(r'^explore/$', explore, name='explore'),
    url(r'^monthly/$', monthlytop10, name='monthlytop10'),
    url(r'^trending/$', trending, name='trending'),
    url(r'^genres/$', genres, name='genres'),
    url(r'^genres/(?P<slug>.+)/$', genre_view, name='genre_view'),
    url(r'^contact/$', contact, name='contact'),
    url(r'^contact/thanks/$', thanks, name='thanks'),
    url(r'^faq/$', faq, name='faq'),
    url(r'^songs/(?P<slug>.+)$', song_search, name='song_search'),
    url(r'^loadmore/dj/$', loadmore_dj, name='loadmore_dj'),
    url(r'^loadmore/genre/$', loadmore_genre, name='loadmore_genre'),
    url(r'^loadmore/month/$', loadmore_month, name='loadmore_month'),
    url(r'^loadmore/trending/$', loadmore_trending, name='loadmore_trending'),
    url(r'^vote/dj/$', vote_dj, name='vote_dj'),
    url(r'^vote/genre/$', vote_genre, name='vote_genre'),
    url(r'^vote/month/$', vote_month, name='vote_month'),
    url(r'^vote/trending/$', vote_trending, name='vote_trending'),
    url(r'^(?P<slug>.+)/$', dj, name='dj'),
)

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
这意味着它试图访问我的搜索应用程序中的最后一个URL。为什么它试图访问DJ页面,即使它位于sitemap.xml URL之后

编辑- 根据eran的建议,我运行了
django\u扩展的
show\u url
命令。这是该文件的输出

/   hunt.views.top100   top100
/404/   django.views.generic.base.TemplateView
/500/   django.views.generic.base.TemplateView
/<slug>/    hunt.views.dj   dj
/contact/   hunt.views.contact  contact
/contact/thanks/    hunt.views.thanks   thanks
/explore/   hunt.views.explore  explore
/faq/   hunt.views.faq  faq
/genres/    hunt.views.genres   genres
/genres/<slug>/ hunt.views.genre_view   genre_view
/loadmore/dj/   hunt.views.loadmore_dj  loadmore_dj
/loadmore/genre/    hunt.views.loadmore_genre   loadmore_genre
/loadmore/month/    hunt.views.loadmore_month   loadmore_month
/loadmore/trending/ hunt.views.loadmore_trending    loadmore_trending
/media/<path>   django.views.static.serve
/monthly/   hunt.views.monthlytop10 monthlytop10
/robots.txt django.views.generic.base.TemplateView
/sitemap.xml    django.contrib.sitemaps.views.sitemap
/songs/<slug>   hunt.views.song_search  song_search
/static/<path>  django.contrib.staticfiles.views.serve
/trending/  hunt.views.trending trending
/vote/dj/   hunt.views.vote_dj  vote_dj
/vote/genre/    hunt.views.vote_genre   vote_genre
/vote/month/    hunt.views.vote_month   vote_month
/vote/trending/ hunt.views.vote_trending    vote_trending
/hunt.views.top100 top100
/404/django.views.generic.base.TemplateView
/500/django.views.generic.base.TemplateView
//hunt.views.dj
/联系人/hunt.views.contact联系人
/联系/谢谢/hunt.views.Thank谢谢
/explore/hunt.views.explore
/常见问题解答/hunt.views.faq常见问题解答
/流派/hunt.views.genres流派
/流派//hunt.views.genre\u view流派\u view
/loadmore/dj/hunt.views.loadmore\u dj loadmore\u dj
/loadmore/genre/hunt.views.loadmore\u流派loadmore\u流派
/loadmore/month/hunt.views.loadmore\u month loadmore\u month
/loadmore/trending/hunt.views.loadmore\u trending loadmore\u trending
/媒体/django.views.static.service
/月/hunt.views.monthlytop10 monthlytop10
/robots.txt django.views.generic.base.TemplateView
/sitemap.xml django.contrib.sitemaps.views.sitemap
/歌曲/hunt.views.song\u搜索歌曲\u搜索
/static/django.contrib.staticfiles.views.service
/趋势分析/搜索。视图。趋势分析
/投票/dj/hunt.views.vote\u dj投票/dj
/投票/类型/狩猎.观点.投票类型投票类型
/投票/月份/hunt.views.vote\u month投票\u month
/投票/趋势分析/搜索。视图。投票\u趋势分析投票\u趋势分析

我注意到,您的站点地图和robots.txt URL是唯一不以斜杠结尾的URL。许多web服务器会将
myurl.com/item
重定向到
myurl.com/item/
——例如,这就是(搜索“尾部斜杠问题”)。尝试对url进行卷曲而不使用尾随斜杠-是否得到301重定向?如果是这样,那么它很可能重定向到包含尾部斜杠的URL,该斜杠与URL.py中的模式不匹配。尝试在正则表达式中添加尾随斜杠,或在settings.py中设置
APPEND_SLASH=True
根据该
show_url
输出,
hunt.views.dj
的URL模式优先,因为
r'^(?p.+)/$”
regex出现在
sitemap.xml
regex之前。前一个正则表达式将请求与“sitemap.xml”匹配,因此Django永远不会达到专门针对sitemap.xml的模式。因此,它永远不会到达/contact/、/explore/、/faq/,等等

我怀疑发生这种情况是因为项目范围的
urls.py
附加到
urlpatterns
(“
urlpatterns+=
”)而不是直接设置它。看起来您没有粘贴从项目范围的
url.py
中导入的所有内容,但我假设您导入的内容之一包括一个
模式
对象;否则,您将在导入时收到
名称错误
名称“模式”未定义

您应该能够通过更改此

urlpatterns+=模式(“”,

…为了这个

urlpatterns=patterns(“”,


但我无法确切知道,因为我不知道您在项目的
url.py中还导入了哪些内容

我以前使用的templates文件夹中有一个
sitemaps.xml
文件。删除该文件解决了这个问题。

您也许应该试试这个,更标准的做法:url(r'',include('hunt.url')),其他URL、
/contact/
/explore/
/faq/
等都可以正常工作。是否也可以添加应用程序URL.py的导入?
/   hunt.views.top100   top100
/404/   django.views.generic.base.TemplateView
/500/   django.views.generic.base.TemplateView
/<slug>/    hunt.views.dj   dj
/contact/   hunt.views.contact  contact
/contact/thanks/    hunt.views.thanks   thanks
/explore/   hunt.views.explore  explore
/faq/   hunt.views.faq  faq
/genres/    hunt.views.genres   genres
/genres/<slug>/ hunt.views.genre_view   genre_view
/loadmore/dj/   hunt.views.loadmore_dj  loadmore_dj
/loadmore/genre/    hunt.views.loadmore_genre   loadmore_genre
/loadmore/month/    hunt.views.loadmore_month   loadmore_month
/loadmore/trending/ hunt.views.loadmore_trending    loadmore_trending
/media/<path>   django.views.static.serve
/monthly/   hunt.views.monthlytop10 monthlytop10
/robots.txt django.views.generic.base.TemplateView
/sitemap.xml    django.contrib.sitemaps.views.sitemap
/songs/<slug>   hunt.views.song_search  song_search
/static/<path>  django.contrib.staticfiles.views.serve
/trending/  hunt.views.trending trending
/vote/dj/   hunt.views.vote_dj  vote_dj
/vote/genre/    hunt.views.vote_genre   vote_genre
/vote/month/    hunt.views.vote_month   vote_month
/vote/trending/ hunt.views.vote_trending    vote_trending