cor*_*vid 11 python jinja2 flask
我使用Flask-Login,它current_user在模板中提供对象.我想写一个宏来显示评论表单或登录链接,具体取决于用户是否登录.如果我直接在模板中使用此代码,它可以工作:
{% if current_user.is_authenticated %}
{{ quick_form(form) }}
{% else %}
<a href="{{ url_for('auth.login') }}">Log In with Github</a>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我在宏中放置了相同的代码,并在我的模板中导入宏.
{% macro comment_form(form) %}
{% if current_user.is_authenticated %}
...
{% endif %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud)
{% from "macros/comments.html" import comment_form %}
{% extends "base.html" %}
{% block content %}
{# ... content goes here ... #}
{{ comment_form(form) }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
当我尝试加载此页面时,我得到的错误是:
jinja2.exceptions.UndefinedError: 'current_user' is undefined
Run Code Online (Sandbox Code Playgroud)
当然,简单的解决方法是current_user作为参数传入并使用它(制作签名comment_form(user, form)),尽管这是一个相当丑陋的解决方案(imo).
为什么宏不使用上下文处理器?它不具备背景吗?
dav*_*ism 15
除非指示执行此操作,否则呈现模板的上下文不会传递给导入.请参阅相关文档.
你是对的,你不需要将上下文作为参数注入宏.您可以导入宏with context,他们将访问导入模板的上下文.
{% from "macros/comments.html" import comment_form with context %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5039 次 |
| 最近记录: |