在网址中强制django查询字符串

时间:2018-05-16 12:49:13

标签: django django-views

假设您有这样的网址:

/cats/?filter=kittens

是否可以构建强制使用查询字符串的django url模式?

目前我有:

url(r'^/cats/$', views.CatsListView.as_view(), name='cats')

现在我想添加查询字符串并获得不同的视图,如下所示:

url(r'^/cats/?filter=(?P<filter>.+?)$', views.CatsFilteredListView.as_view(), name='cats-filtered')

是否可以执行此类操作并仍将查询字符串保留在request的GET参数中? 请记住,这只是一个测试用例,我,您也应该知道,过滤可能不是这样的方式..

3 个答案:

答案 0 :(得分:3)

简短的回答:不,这是不可能的。 Django网址模式仅匹配&#34;路径&#34;网址的组成部分,期间。

答案 1 :(得分:1)

不,不可能这样做。如果您确实需要两个单独的视图,则可以编写一个调度正确视图的视图。

def cat_list_view(request, *args, **kwargs):
    if 'filter' in request.GET:
        return cat_list_filter_view(request, *args, **kwargs)
    else:
        return cat_list_unfiltered_view(request, *args, **kwargs)

但是,对于CatsListViewCatsFilteredListView的示例,可能有更好的方法来组合视图。例如,您可以使用get_queryset方法进行过滤。

答案 2 :(得分:1)

虽然确实不能像这样操作路径组件,但是可以传入字典。这是第三个未命名的参数。

如果您要对多个资源使用相同的视图,并在每种情况下都传递数据以配置其行为(以下我们分别提供不同的模板),则此方法很有用。

path('url/', views.my_reused_view, {'my_template_name': 'some_path'}, name='aurl'),
path('anotherurl/', views.my_reused_view, {'my_template_name': 'another_path'}, name='anotherurl'),
  

注意:额外选项和命名捕获模式都作为命名参数传递到视图。如果对捕获的模式和附加选项使用相同的名称,则仅将捕获的模式值发送到视图(附加选项中指定的值将被删除)。

https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Generic_views

提供
相关问题