首页 > 解决方案 > 从 url 捕获任意数量的值

问题描述

我在 Django 中创建了一个 url 模式,它在 url 中捕获一个类别并将其传递到视图中。例如 url mysite.com/category/shoes/匹配路径:

path('category/<category>/', views.Feed.as_view(), name='feed'),

category它会将一个名为value的变量传递给视图"shoes"

现在我还想捕获子类别。类别和子类别将被组织为一个树结构,一个子类别中可能有更多的子类别。我如何编写一个 url 路径模式来捕获任意数量的嵌套子类别,例如:

mysite.com/category/shoes/winter/leather/...

以及如何将其传递给视图?

标签: djangourldjango-urls

解决方案


这很简单。使用此语法:

path('category/<category>/<int:year>/<str:type>', views.Feed.as_view(), name='feed')
path('category/<category>/<str:type>/<int:size>', views.Feed.as_view(), name='feed-shoes')

您也可以使用查询参数并在视图中添加逻辑来提取它们。

path('category/$', views.Feed.as_view(), name='feed')

在您看来:

if request.GET.get('category', None) == 'shoes':
    # check other params

另一个更好的做法是根据不同的类别拆分您的视图,编写一个可以接受任意数量的参数的视图是不好的做法。写出你的 URL 并拆分你的视图会更简单更好。

请参阅Django 文档


推荐阅读