假设我有以下视图ScheduleList
,其中用户(已记录或未记录)可以按选定日期查看任务列表,PersonalizedScheduleList
用户可以看到所有任务属于他(他必须登录) )。我可以使用一个ListView,并且在get_queryset
方法中放大,如果是经过身份验证的用户而不是 - 数据处理不同。
如何在已登录和未登录的用户的同一网址模式上显示不同的视图,以便已记录的用户可以在主页面上看到他的计划列表而不记录可以通过选择当天查看任务?
urlpattern('',
url(r'^$', views.ScheduleList.as_view()), # not logged user
url(r'^$', views.PersonalizedScheduleList.as_view()), # logged user
)
答案 0 :(得分:1)
您需要考虑请求处理和URL路由的控制流。收到请求后,Django会找到与请求的URL匹配的第一个URL模式,并调用分配给该URL的函数(或者在您的情况下,定义了__call__
方法的类(CBV实现细节)。这意味着,你不能在一个URL路由级别,只根据标题值分配一个视图而不是另一个视图(认证通常基于某些标题; cookie等),除非URL不同。
答案 1 :(得分:0)
恕我直言,最佳做法是提供单一视图并执行以下操作:
{% if request.user.is_authenticated %}
.... Authenticated content
{% else %}
.... non-authenticated content
{% endif %}
如果您想要执行2个单独的视图,则需要从/向个性化视图重定向(可能在两个视图中)。