在某些页面上,我希望我的表单按特定顺序下拉,而其他页面则按默认顺序下拉。从我的应用传递特定顺序时,form.html
中的宏似乎看不到它。从不使用dropdown
,模板始终显示全局数据。为什么会这样?
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 %}
app.py
:
dropdown = [
'Placed',
'Review Not Started',
'Review Passed',
'Review Failed',
'Contacted Pending',
'Contacted Failed',
'No Contacts',
'No Reply',
'Not Interested'
]
dropdown.insert(0, dropdown.pop(dropdown.index(link_status)))
return render_template('view.html', dropdown=dropdown)
答案 0 :(得分:4)
您没有直接呈现form.html
,而是呈现view.html
并导入form.html
。 When importing other templates, the template context is not passed by default. dropdown
是view.html
上下文的本地,因此在form.html
中始终未定义。
要导入包含上下文的模板,请使用with context
关键字。
{% from "form.html" render_form with context %}
更好,更明确的方法是将dropdown
作为参数传递给宏。这样效率更高,因为正如上面提到的文档,导入通常是为了提高性能而缓存的,但使用with context
会禁用它。
{% macro render_form(form, dropdown=None) -%}
{% if dropdown %}
{% else %}
{% endif %}
{%- endmacro %}
{% from "form.html" import render_form %}
{{ render_form(form, dropdown) }}