我有一个辅助宏的单独文件,所以我需要时导入一个。这是一个有问题的宏:
{% macro row_cycler(tiles) -%}
{%- set row1 = [] -%}
{%- set row2 = [] -%}
{%- set row3 = [] -%}
{%- set row4 = [] -%}
{%- set rows = cycler(row1, row2, row3, row4) -%}
{% for column in tiles|batch(4) -%}
{% for tile in column -%}
{%- do rows.next().append(tile) -%}
{%- endfor %}
{%- endfor %}
{{ dict(row1=row1, row2=row2, row3=row3, row4=row4) }}
{%- endmacro %}
似乎它返回dict,但事实并非如此。它返回“markupsafe.Markup对象”,它会导致以下内容:
UndefinedError: 'markupsafe.Markup object' has no attribute 'itervalues'
等等。我如何强迫Jinja在没有转换的情况下返回dict?
答案 0 :(得分:3)
不,宏只能返回模板片段(以Markup
个对象的形式),而不是像字典这样的Python对象。改为使用Python代码;为传递到模板中的项添加函数或添加全局模板。
在你的情况下看起来好像你正在重新实现slice()
filter,所以在这种情况下甚至可能都不需要。