如何区分两个相似的模式网址?

时间:2012-01-09 12:15:09

标签: python django

url(r'^foobar/(?P<field1>.+)/$', views.foo, name="foo"),
url(r'^foobar/(?P<field2>.+)/$', views.bar , name="bar"),

这些是django中类似的模式网址。但它需要不同的参数。我如何区分它们。

2 个答案:

答案 0 :(得分:1)

如果参数匹配相同的正则表达式(如上例所示),则需要将任何进一步的调度移动到视图本身。所以让两个url映射到同一个视图,并在视图中做一些进一步的逻辑来决定接下来要做什么,例如:

 def dispatcher(request, arg):
      if arg == 1:
           return fun1(request, arg)
      else:
           return fun2(request, arg)

(请注意,此示例可以在网址中完成:

url(r'^foobar/(?P<field1>1)/$', fun1)
url(r'^foobar/(?P<field1>.*)/$', fun2)

注意首先尝试第一个网址

答案 1 :(得分:0)

我会成功:

url(r'^foobar/(?P<name>foo)/(?P<field1>.+)/$', views.foo),
url(r'^foobar/(?P<name>bar)/(?P<field1>.+)/$', views.bar),

或者:

url(r'^foobar/(?P<name>foo|bar)/(?P<field1>.+)/$', views.foo),

def foo(request, name, field1):
    if name = 'foo':
        do_foo(request, field1)
    else:
        do_bar(request, field1)