Django中所需字符串和可选字符串的正确正则表达式是什么?

时间:2013-08-28 22:10:38

标签: regex django url-pattern

因此,在我的Django URL中,我希望能够支持:

mysite.com/section

mysite.com/section /

mysite.com/section/sectionAlphaNum

mysite.com/section/sectionAlphaNum /

我目前有URL模式:

(r'^section/(?P<id>\s?)?', section)

哪个应该是 section / ,以及可选后的任何内容,但它似乎永远不会捕获我输入的所有sectionAlphaNum。在我的 views.py 文件中我

def section(request,id):
    if id == '':
        # Do something with id
    else:
        # Do default action

但它似乎永远不会进入顶部,如果它使用id

做分支

4 个答案:

答案 0 :(得分:1)

您可以尝试以下语法:(r'^section/(?P<id>\w+)/$', section)

答案 1 :(得分:1)

在正则表达式中,^$分别代表字符串的开头和结尾。

因此,显示/section/的网址为:

(r'^section/$', section_view)

而显示特定部分/section/section-id/的网址为:

(r'^section/(?P<section_id>\w+)$', section_detail_view)

理想情况下,views.py

中有不同的观点
def section_view(request):
    # show page about the various sections

def section_detail_view(request, section_id):
    # show page about specific section by section_id

答案 2 :(得分:1)

urls.py:

...
(r'^section/$', section),
(r'^section/(?P<id>\w+)/$', section),
...

views.py:

def section(request, id=None):
    if id is None:
       ...
    else:
       ...

要仅添加斜杠(从/section添加到/section/),请在您的设置MIDDLEWARE_CLASSES中启用CommonMiddleware。

答案 3 :(得分:0)

(r'^section(?:/(?P<id>\w+))?/$', section)

注意最后?使整个(?:/(?P<id>\w+))可选。

其他答案缺少?,或者他们没有使其中一个斜杠(/)可选,就像我对(?:/(中的第一个那样...

r'^section/(?:(?P<id>\w+)/)?$'  # same result, last '/' optional.

并在函数中使参数可选:

def section(request, id=None):
    # ...