【问题标题】:Django url regex questionDjango url 正则表达式问题
【发布时间】:2011-10-04 04:33:27
【问题描述】:

我有以下网址

url(r'^(?P<name>[A-Za-z0-9-]+)/$', 'user', name='user')

这匹配像 /tom/ 和 /tom-max/ 这样的 URL,但不匹配我想要的像 /tom-2/ 或 tom-brandy-monster 这样的 URL。

基本上我想捕捉连字符、字母和数字的组合。

更新

这是在我的 urls.py 中

urlpatterns = patterns('',
    url(r'^$', 'homepage.views.home', name='home'),
    url(r'^user/', include('users.urls')),
    url(r'^plans/', include('plans.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

这是在我的 users/urls.py 中

urlpatterns = patterns(
    'users.views',
    url(r'^(?P<user>[A-Za-z0-9-]+)/$', 'user', name='user'), 
)

更新2

在我看来是错误的。此正则表达式适用于所有上述示例。

【问题讨论】:

  • 看起来应该可以了。我建议仔细查看在此之前发生的模式,看看它们是否在请求到达此模式之前捕获了请求。
  • @Peter:你是对的;看我的回答。
  • 那是users.urls.py?我希望你的意思是users/urls.py?
  • 我不太确定出了什么问题。我假设在您的测试中,您都在前面加上user/。而且我认为您在urls.py 文件中遗漏的唯一内容是导入?
  • 你为什么认为它与那些不匹配?

标签: regex django django-urls


【解决方案1】:

你所拥有的将匹配你指定的所有这些(见下文)。您应该检查以确保 (a) 您没有一个会更早匹配的 URL 模式,并且 (b) 包含这个模式(一个常见的罪魁祸首是在初始化后使用 urlpatterns = ... 而不是 urlpatterns += ...) .

>>> import re
>>> urlpattern = re.compile(r'^(?P<name>[A-Za-z0-9-]+)/$')
>>> urlpattern.match('tom/').group('name')
'tom'
>>> urlpattern.match('tom-max/').group('name')
'tom-max'
>>> urlpattern.match('tom-2/').group('name')
'tom-2'
>>> urlpattern.match('tom-brandy-monster/').group('name')
'tom-brandy-monster'

【讨论】:

  • 嗨 Chris Morgan,你能看看我的 URLS 看看有什么问题吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 2023-03-05
  • 2011-03-22
  • 2013-07-26
  • 2014-07-08
  • 1970-01-01
相关资源
最近更新 更多