Django url mapping:正则表达式

时间:2014-10-05 06:36:42

标签: regex django

在Django中,我想使用正则表达式:

url(r'^(?P<arg1>\w+)/(?P<arg2>\w*)/$', ...)

匹配以下两个请求:

http://localhost:8000/someApp/showData/
http://localhost:8000/someApp/showData/addRecord/

它不适用于第一个请求。我该怎么办?

2 个答案:

答案 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

通过这种方式,您的意图对于以后看到您的代码的人来说更加清晰,如果有必要,可以更轻松地将某些功能提取到单独的视图中。