1

我想根据用户是否登录在同一个URL(主页)显示不同的东西。

因此,如果他通过身份验证,我将显示一个不涉及任何数据库查询的页面,否则,如果他登录,我将显示他的项目(这涉及数据库访问)。

那么,鉴于以下情况,我该如何做到这一点:

  • 我只有 1 个网址格式
  • 我想使用基于类的通用视图(特别是在一种情况下是 TemplateView,在另一种情况下是 DetailView)。
4

2 回答 2

1

检查是否 User.is_authenticated(),如果是,则查询项目,如果不是,则不查询项目,并在视图中查看项目变量是否已设置。

于 2013-06-10T14:02:47.647 回答
0

通常会使用Login Required装饰器,但由于您只有一个 URL,您可以检查 request.user.is_authenticated() 是否为 True。如果为True,则返回登录用户对应的模板,否则返回另一个。

基于类的视图

看看这个:TemplateView 中需要登录

它使用 dispatch 方法来检查用户是否在基于类的视图中进行了身份验证。

从 django 导入 http 从 django.views 导入通用

class AboutView(generic.TemplateView):
    """ About page view. """
    template_name = 'about.html'

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated():
            raise http.Http404
        return super(AboutView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        ctx = super(AboutView, self).get_context_data(**kwargs)
        ctx['something_else'] = None  # add something to ctx
        return ctx
于 2013-06-10T14:01:55.267 回答