我有一个像这样的django urls.py文件:
基础文件:
urlpatterns = patterns('',
(r'^', include('sp.sp_app.urls')),
(r'^', include('sp.sp_api_activity.urls')),
(r'^', include('sp.sp_api_player.urls')),
(r'^', include('sp.sp_web.urls')),
)
在sp.sp_web.urls文件中,我有以下内容:
from django.conf.urls.defaults import *
urlpatterns = patterns('superproof.superproof_web.views',
(r'^$','index'), #Shows your home page
(r'^challenge$','spcreatechallenge'),
(r'^player/`$','getlastactivity'),
(r'^yearlysummary/','yearlysummary'),
(r'^processchallenge$','processchallenge'),
(r'^activity/(\w{32})$','activitydetail'),
)
每年的总结网址有时会加载。其他时候,我收到404错误。使用完全相同的有效URL会发生这种情况。我不会更改URL或代码中的任何内容。
当我打开调试时出现404错误时,我的每年总结URL模式不在列表中。
有什么想法吗?
答案 0 :(得分:0)
我注意到的一些事情可能是一个问题...
我注意到你没有为每个应用程序命名包含你的网址。不知道其他网址模块是什么样的,我可以假设你可能有碰撞的网址。我建议做这样的事情:
urlpatterns = patterns('',
(r'', include('sp.sp_app.urls')),
(r'^activity/', include('sp.sp_api_activity.urls')),
(r'^player/', include('sp.sp_api_player.urls')),
(r'^web/', include('sp.sp_web.urls')),
)
通常,如果您有网址包含,则它们适用于不同的应用,因此您需要对其进行命名,以避免两个应用指定相同的网址模式。
另外,你的一个网址中有什么回复?你的意思是期望吗?
(r'^player/`$','getlastactivity'),
答案 1 :(得分:0)
您会注意到,如果您将(r'^', include('sp.sp_web.urls')
作为主urls.py
中的第一个模式,那么您的视图将始终正确加载。
当你将它作为最后一个模式时,它与其他模式不匹配的原因是,该模式与早期模式中的其他模式匹配,比如[/w+]
。在url模式的404上的调试页面显示其匹配的模式之一的所有子url模式。这正是模式不在调试页面上显示的URL上的原因。
与jdi一样,提及正确命名网址是一种好习惯,因此不会发生这种情况。你甚至可以在没有命名空间的情况下完成它,但你的正则表达式必须正确,至少包括结束字符$
。