在类 Index(TemplateView) 中使用 request.user

Posted

技术标签:

【中文标题】在类 Index(TemplateView) 中使用 request.user【英文标题】:Use request.user in class Index(TemplateView) 【发布时间】:2016-12-27 22:07:57 【问题描述】:

我正在尝试实现这个:

class Index(TemplateView):
    if request.user.role == 'admin':
        template_name = 'index/admin/index.html'
    elif request.user.role == 'ff':
        template_name = 'index/firefighter/index.html'
    else:
        template_name = 'index/dev/index.html'

@method_decorator(ensure_csrf_cookie)
def dispatch(self, *args, **kwargs):
    return super(Index, self).dispatch(*args, **kwargs)

而且我不知道如何实现它......有什么帮助吗?此代码不起作用有错误:“未定义的名称'请求'”

【问题讨论】:

【参考方案1】:

get_template_names() 方法中设置您的模板:

from django.utils.decorator import method_decorator

class Index(TemplateView):
    def get_template_names(self, *args, **kwargs):
        roles_urls = 'admin': 'index/admin/index.html',
                      'ff': 'index/firefighter/index.html'
        default = 'index/dev/index.html'
        return [roles_urls.get(self.request.user.role, default)]

    @method_decorator(ensure_csrf_cookie)
    def dispatch(self, *args, **kwargs):
        return super(Index, self).dispatch(*args, **kwargs)

【讨论】:

它的工作...但是'来自 django.utils.decorator method_decorator' 应该是'from django.utils.decorator import method_decorator'

以上是关于在类 Index(TemplateView) 中使用 request.user的主要内容,如果未能解决你的问题,请参考以下文章

每月项目数在 CreateView 中有效,但在 TemplateView 中无效

authenticate()和login()实现用户登录 | Django

TemplateView 是不是支持分页?

在 Django 中使用 TemplateView 时设置 Mimetype

django-基于类的视图

markdown Protegendoosmétodos做TemplateView