因此,在我的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
做分支答案 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):
# ...