django - 将请求重定向到正确的视图
问题描述
Django==2.2.2
网址模式:
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
问题: 这个 url 指向 CampaignsListView 而不是 CampaignsDetailView。如何将此请求定向到 CampaignsDetailView?
解决方案
该?ids=44174865,44151214,44049374
部分不是URL路径的一部分,而是查询字符串[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)
虽然看起来有点“丑”。
推荐阅读
- python - Python数据框检查连续值的增量
- r - 将列拆分为几个变量并将相应的值移动到新列
- javascript - 画布 - 看不到我星星的颜色
- dependency-injection - 如何从 ViewModel Xamarin 表单访问工具栏项
- php - 如何从python调用服务器中的php脚本
- android - 如何在android [kotlin]中获取图像的resourceId?
- azure - 将数据从 Azure DWH 复制到 Azure 中的 Dynamics 365
- javascript - Bootbox 创建叠加层
- javascript - JS/jQuery - setInterval 应用多次且速度太快
- php - Retrieve Facebook user details with using Socialite Laravel