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

时间:2017-12-29 10:04:14

标签: python django

我在django(1.11)上编写自己的自定义context_processor,并从auth0获取经过身份验证的用户的信息。这不是我第一次写这篇文章而且我不明白这个错误来自哪里:

  

ImportError:Module" 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}

accounts / views.py:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

而不是

'auth.context_processors.auth0_processors'

给出具体方法:

'auth.context_processors.auth0_processors.auth0_user'

至少这是错误抱怨的内容:

  

没有定义" auth0_processors"的属性/类

正在寻找一个类或属性,所以请尝试使用函数名。

来自documentation

  

context_processors 选项是一个可调用的列表 - 称为上下文处理器 - 将请求对象作为其参数并返回要合并到上下文中的项的字典

回答你的评论:

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

编辑:

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