gpt4 book ai didi

python - Django url 模式顺序和正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:49 26 4
gpt4 key购买 nike

我的应用程序发生了一些我无法理解的事情。这是 django 文档所说的。

  1. Django runs through each URL pattern, in order, and stops at the first one that matches the requested 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'),
)

我错过了什么?

最佳答案

因为模式 (.+) 匹配 1/rose。您不仅仅将其限制为字母数字字符,因此它会捕获所有内容。

您已经知道交换正则表达式的顺序是有效的。但无论如何,您可能想限制它匹配的内容。如果您只需要数字 ID,这会更好:

'^league/(\d+)/$'

或者您可以匹配字母数字字符:

'^league/(\w+)/$'

甚至除了斜杠之外的所有内容:

'^league/([^/]+)/$'

关于python - Django url 模式顺序和正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25564748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com