Django == 2.2.2
Urlpattenrs:
urlpatterns = [
re_path(r'^campaigns/$', CampaignsListView.as_view(), name="campaigns_list"),
re_path(r'^campaigns/(?P<ids>\w+)/$', CampaignsDetailView.as_view(), name="campaigns_detail"),
]
我的网址:
http://localhost:8000/campaigns/?ids=44174865,44151214,44049374
问题: 该网址指向CampaignsListView,而不是CampaignsDetailView。您能帮我将此请求定向到CampaignsDetailView吗?
答案 0 :(得分:1)
?ids=44174865,44151214,44049374
部分不是URL的路径的一部分,而是querystring [wiki]的路径。您不能基于查询字符串定向到其他视图。查询字符串的内容被处理成request.GET
[Django-doc](一个类似字典的对象)。
因此,您应该在视图本身中处理此问题。例如,您可以过滤有ids
个值的列表视图:
class CampaignsListView(ListView):
# ...
def get_queryset(self):
qs = super().get_queryset()
ids = request.GET.get('ids')
if ids:
try:
return qs.filter(id__in=map(int, ids.split(',')))
except ValueError:
return qs
return qs
或者您可以检查URL是否包含查询集,然后让CampaignsDetailView
完成工作,例如:
class CampaignsListView(ListView):
# ...
def get(self, request, *args, **kwargs):
if 'ids' in request.GET:
return CampaignsDetailView.as_view()(request, *args, **kwargs)
return super().get(request, *args, **kwargs)
尽管看起来有点“丑陋”。