假设您有这样的网址:
/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参数中?
请记住,这只是一个测试用例,我,您也应该知道,过滤可能不是这样的方式..
答案 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)
但是,对于CatsListView
和CatsFilteredListView
的示例,可能有更好的方法来组合视图。例如,您可以使用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
提供