如何在django中传递多个url参数

Man*_*pta 6 python django

我的html模板中有2个链接.第一个链接只传递1个参数到URL,第二个链接传递2个参数.像这样:

<a href="/products/{{categ_name}}">{{categ_name}}</a>
<a href="/products/{{categ_name}}/{{subcateg_name}}">{{subcateg_name}}</a>
Run Code Online (Sandbox Code Playgroud)

现在当我点击带有1个参数的链接时,它工作正常.我在django视图中获取参数值.
但是当我点击带有两个参数的链接时,我只得到第一个参数.我在第二个参数的值中得到None.

我的urls.py:

urlpatterns = patterns('',
            url(r'^products/(?P<categ_name>\w+)/', views.products, name='products_category'),
            url(r'^products/(?P<categ_name>\w+)/(?P<subcateg_name>\w+)/', views.products, name='products_subcategory'),
            url(r'^logout/',views.logoutView, name='logout'),)
Run Code Online (Sandbox Code Playgroud)

我的views.py:

def products(request, categ_name=None, subcateg_name=None):
    print categ_name, subcateg_name
    ...
Run Code Online (Sandbox Code Playgroud)

如何获得第二参数的值?

Mac*_*iek 12

将您的网址更改为:

urlpatterns = patterns('',
            url(r'^products/(?P<categ_name>\w+)/$', views.products, name='products_category'),
            url(r'^products/(?P<categ_name>\w+)/(?P<subcateg_name>\w+)/$', views.products, name='products_subcategory'),
            url(r'^logout/',views.logoutView, name='logout'),)
Run Code Online (Sandbox Code Playgroud)

然后,避免您的2参数url与第一个1参数模式匹配.$ special字符表示字符串结尾.

  • 附注:也可以简单地重新排序URL模式,以便首先列出更具体的URL模式.Django的[第一匹配胜](https://docs.djangoproject.com/en/1.8/topics/http/urls/#how-django-processes-a-request)的基础上进行处理的URL.但是,明确添加锚点可能更清晰. (3认同)