django编写自定义上下文处理器

发布于 2021-01-29 15:01:34

我正在context_processorDjango(1.11)上编写自己的自定义,并从auth0获取经过身份验证的用户的信息。这不是我第一次写它,我也不知道这个错误是从哪里来的:

ImportError:模块“ auth.context_processors”未定义“ auth0_processors”属性/类

看起来是这样的:

auth / settings.py:

'context_processors': [
     'django.template.context_processors.debug',
     'django.template.context_processors.request',
     'django.contrib.auth.context_processors.auth',
     'django.contrib.messages.context_processors.messages',
     'auth.context_processors.auth0_processors', 
],

auth / context_processors / auth0_processors.py:

def auth0_user(request):
    try:
        user = request.session['profile']
    except Exception as e:
        user = None

    return {'auth0_user': user}

account / views.py:

def home(request):
    return render(request, 'home.html', {})

任何想法?

关注者
0
被浏览
105
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    代替

    'auth.context_processors.auth0_processors'
    

    给出具体方法:

    'auth.context_processors.auth0_processors.auth0_user'
    

    至少那是该错误所抱怨的:

    没有定义“ auth0_processors” 属性/类

    它正在寻找类或属性,因此请尝试使用函数名称。

    文档中

    context_processors 选项是可调用的列表-所谓 的上下文处理器
    -这需要一个request对象作为参数,返回项目的字典合并到上下文。

    在回答您的评论时:

    如果您始终需要相同的对象,则只需创建一个将所有必需的对象添加到上下文中的方法,而不是几个方法。

    编辑:

    还要注意,'django.template.context_processors.request'您可能已经request在上下文中拥有了完整的对象。如果只需要访问会话,则可能不需要自己的上下文处理器。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看