Lau*_*ius 2 python django django-templates jinja2 django-authentication
我正在尝试使用 Django 提供的身份验证和授权系统,因为我可以看到登录/注销的默认内置视图期望 Django 模板,因此我不能使用我的 Jinja2base.html
文件来扩展它们,因为我已经集成了 Jinja2 引擎。
我能够通过复制 'base.html' 并将语法更改为 Django 模板来解决这个问题,但这种方法迫使我依赖于不同模板语言的两个相同文件。
但是,现在我有其他问题,我无法访问user
Jinja2 模板中的对象context
,即使我可以在 Django 模板中做到这一点。
通过说“我无法访问”:
File "/home/dir/workspace/project/venv/local/lib/python2.7/site-packages/jinja2/environment.py", line 430, in getattr return getattr(obj, attribute)
UndefinedError: 'user' is undefined
Run Code Online (Sandbox Code Playgroud)
我的 Jinja2 模板:
{% if user.is_authenticated %}
<li>User: {{ user.get_username }}</li>
<li><a href="{% url 'logout'%}?next={{request.path}}">Logout</a></li>
{% else %}
<li><a href="{% url 'login'%}?next={{request.path}}">Login</a></li>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我该如何解决这个问题?我是否应该只切换回 Django 模板,因为这变得越来越混乱。
当您使用 Django 模板语言时,您可以使用,{{ user }}
因为启用了 auth 上下文处理器。然而,不鼓励在 Jinja2 中使用上下文处理器。
您可以访问request
Jinja2 模板上下文中的 ,因此您可以访问request.user
.
Supported in Django 1.10 and 1.11, required in Django 2.0+
{% if request.user.is_authenticated %}
Run Code Online (Sandbox Code Playgroud)
请注意,在 Django < 1.10 中,user.is_authenticated()
是一个方法,因此您必须在 Jinja2 模板中调用它:
Required in Django < 1.10, supported in Django 1.10 and 1.11
{% if request.user.is_authenticated() %}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1686 次 |
最近记录: |