在Django中,我想使用正则表达式:
url(r'^(?P<arg1>\w+)/(?P<arg2>\w*)/$', ...)
匹配以下两个请求:
http://localhost:8000/someApp/showData/
http://localhost:8000/someApp/showData/addRecord/
它不适用于第一个请求。我该怎么办?
答案 0 :(得分:1)
将第二个捕获组和第二个捕获组之前的/
添加到非捕获组中,并通过在整个非捕获组之后添加?
使其成为可选项。
^(?P<arg1>\w+)(?:/(?P<arg2>\w*))?/$
OR
将第二个非捕获组之前的/
字符设为可选字段。
^(?P<arg1>\w+)/?(?P<arg2>\w*)/$
答案 1 :(得分:1)
我建议你使用两个urlconf而不是一个,一个有一个param,另一个有两个,都指向同一个视图,第二个参数是可选的。类似的东西:
# urls.py
urlpatterns = patterns("",
url(r"^(?P<arg1>\w+)/(?P<arg2>\w+)/$", yourview, name="yourview_with_arg1_arg2"),
url(r"^(?P<arg1>\w+)/$", yourview, name="yourview_with_arg1"
)
# views.py
def yourview(arg1, arg2=None):
pass # etc
通过这种方式,您的意图对于以后看到您的代码的人来说更加清晰,如果有必要,可以更轻松地将某些功能提取到单独的视图中。