我无法理解我的应用程序正在发生的事情。 这就是django文档所说的。
- Django按顺序遍历每个URL模式,并在第一个匹配请求的URL的位置停止。
醇>
这是我的网址模式。
urlpatterns = patterns('',
#rosa
url(r'^league/(.+)/rose/$','fantacalcio.views.rose',name='rose'),
#league page
url(r'^league/(.+)/$', 'fantacalcio.views.league_home',name='league_home'),
)
这是我期望工作的网址模式:
urlpatterns = patterns('',
#league page
url(r'^league/(.+)/$', 'fantacalcio.views.league_home',name='league_home'),
#rosa
url(r'^league/(.+)/rose/$','fantacalcio.views.rose',name='rose'),
)
但是反而给了我这个错误:
ValueError at /league/1/rose/
invalid literal for int() with base 10: '1/rose'
这种情况正在发生,因为/league/1/rose/
在league/1/
停止,根据我的理解,不会移动到下一个网址。我不明白为什么,因为在django文档中我可以找到这个例子:
urlpatterns = patterns('',
url(r'^articles/2003/$', 'news.views.special_case_2003'),
url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
)
我错过了什么?
答案 0 :(得分:1)
因为模式(.+)
匹配 1/rose
。你不是仅限于字母数字字符,所以它抓住了一切。
您已经知道交换正则表达式的顺序有效。但无论如何,你可能想限制它匹配的东西。如果你只想要数字ID,那就更好了:
'^league/(\d+)/$'
或者你可以匹配字母数字字符:
'^league/(\w+)/$'
甚至除了斜线之外的所有内容:
'^league/([^/]+)/$'