Python Jinja宏不';看不到传递给渲染模板的值

Python Jinja宏不';看不到传递给渲染模板的值,python,flask,jinja2,Python,Flask,Jinja2,在某些页面上,我希望我的表单下拉列表按特定顺序排列,在其他页面上则按默认顺序排列。当从我的应用程序传递特定的顺序时,我的宏在form.html中似乎没有看到它下拉列表从不使用,模板始终显示全局数据。为什么会这样 form.html: {% if dropdown %} <select name="status"> {% for option in dropdown %} <option value="{{ op

在某些页面上,我希望我的表单下拉列表按特定顺序排列,在其他页面上则按默认顺序排列。当从我的应用程序传递特定的顺序时,我的宏在
form.html
中似乎没有看到它<代码>下拉列表从不使用,模板始终显示全局数据。为什么会这样

form.html

    {% if dropdown %}
        <select name="status">
        {% for option in dropdown %}
              <option value="{{ option }}">{{ option }}</option>
        {% endfor %}
        </select>
    {% else %}
        <select name="status">
        {% for option in global_add_links_data()[0] %}
              <option value="{{ option }}">{{ option }}</option>
        {% endfor %}
        </select>
    {% endif %}

您不是直接呈现
form.html
,而是呈现
view.html
并导入
form.html
下拉列表是
视图.html
上下文的本地内容,因此在
表单.html
中总是未定义

要导入带有上下文的模板,请使用带有上下文的
关键字

{% from "form.html" render_form with context %}

更好、更明确的处理方法是将
下拉列表作为参数传递给宏。这更有效,因为正如上面提到的文档,导入通常是为了性能而缓存的,但是将
与上下文一起使用
会禁用这一功能

{% macro render_form(form, dropdown=None) -%}
    {% if dropdown %}
    {% else %}
    {% endif %}
{%- endmacro %}

您不是直接呈现
form.html
,而是呈现
view.html
并导入
form.html
下拉列表是
视图.html
上下文的本地内容,因此在
表单.html
中总是未定义

要导入带有上下文的模板,请使用带有上下文的
关键字

{% from "form.html" render_form with context %}

更好、更明确的处理方法是将
下拉列表作为参数传递给宏。这更有效,因为正如上面提到的文档,导入通常是为了性能而缓存的,但是将
与上下文一起使用
会禁用这一功能

{% macro render_form(form, dropdown=None) -%}
    {% if dropdown %}
    {% else %}
    {% endif %}
{%- endmacro %}