Django urlconf有时会失败吗?

时间:2012-01-26 22:56:35

标签: django

我有一个像这样的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模式不在列表中。

有什么想法吗?

2 个答案:

答案 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)

分析结果显示,jdi是现货。在你的情况下,我会尝试解释为什么确实存在问题。

您会注意到,如果您将(r'^', include('sp.sp_web.urls')作为主urls.py中的第一个模式,那么您的视图将始终正确加载。

当你将它作为最后一个模式时,它与其他模式不匹配的原因是,该模式与早期模式中的其他模式匹配,比如[/w+]。在url模式的404上的调试页面显示其匹配的模式之一的所有子url模式。这正是模式不在调试页面上显示的URL上的原因。

与jdi一样,提及正确命名网址是一种好习惯,因此不会发生这种情况。你甚至可以在没有命名空间的情况下完成它,但你的正则表达式必须正确,至少包括结束字符$