如何使用 jinja 将不同的索引附加到 html 元素?
How to attach different indices to an html element with jinja?
我正在创建一个简单的 html 问卷文档,作为基本模板,我使用以下 jinja 代码:
from jinja2 import Template
title = ['1 title', '2 title']
message = ['1 message', '2 message']
template = Template(
"""
{% macro create_block(title, message) %}
<h1> {{title}} </h1>
<h3>question?</h3>
<input type="radio" value="val1" name="question1_{{ i }}">option A</input>
<input type="radio" value="val2" name="question1_{{ i }}">option B</input>
<h3>question 2?</h3>
<input type="radio" value="one" name="question1_{{ i }}">a</input>
<input type="radio" value="two" name="question1_{{ i }}">b</input>
<input type="radio" value="three" name="question1_{{ i }}">c</input>
{% endmacro %}
{% for title, message in list %}
{{ create_block(title, message) }}
{% endfor %}
""")
print_html(template.render(list=zip(title, message)))
以上模板针对标题和消息列表中的元素数量创建了问题集。例如,对于title
中的两个元素,上述代码会生成两个不同的问卷集。但是,为了生成有效的 html 文档,我想改变 name="question1_{{ i }}
中的 {{i}}
参数。对于上述模板,预期输出如下所示:
<h1>
1 title
</h1>
<h3>
question?
</h3>
<input name="question1_1" type="radio" value="val1"/>
option A
<input name="question1_1" type="radio" value="val2"/>
option B
<h3>
question 2?
</h3>
<input name="question1_2" type="radio" value="one"/>
a
<input name="question1_2" type="radio" value="two"/>
b
<input name="question1_2" type="radio" value="three"/>
c
<h1>
2 title
</h1>
<h3>
question?
</h3>
<input name="question2_1" type="radio" value="val1"/>
option A
<input name="question2_1" type="radio" value="val2"/>
option B
<h3>
question 2?
</h3>
<input name="question2_2" type="radio" value="one"/>
a
<input name="question2_2" type="radio" value="two"/>
b
<input name="question2_2" type="radio" value="three"/>
c
在 Jinja 中,获得上述输出的正确方法是什么?复选框名称的索引不同?
您可以像传递其他参数一样将索引作为参数传递。
from jinja2 import Template
title = ['1 title', '2 title']
message = ['1 message', '2 message']
indices = list(range(len(title)))
template = Template(
"""
{% macro create_block(title, message, i) %}
<h1> {{title}} </h1>
<h3>question?</h3>
<input type="radio" value="val1" name="question1_{{ i }}">option A</input>
<input type="radio" value="val2" name="question1_{{ i }}">option B</input>
<h3>question 2?</h3>
<input type="radio" value="one" name="question1_{{ i }}">a</input>
<input type="radio" value="two" name="question1_{{ i }}">b</input>
<input type="radio" value="three" name="question1_{{ i }}">c</input>
{% endmacro %}
{% for title, message, i in list %}
{{ create_block(title, message, i) }}
{% endfor %}
""")
print_html(template.render(list=zip(title, message, indices)))
我正在创建一个简单的 html 问卷文档,作为基本模板,我使用以下 jinja 代码:
from jinja2 import Template
title = ['1 title', '2 title']
message = ['1 message', '2 message']
template = Template(
"""
{% macro create_block(title, message) %}
<h1> {{title}} </h1>
<h3>question?</h3>
<input type="radio" value="val1" name="question1_{{ i }}">option A</input>
<input type="radio" value="val2" name="question1_{{ i }}">option B</input>
<h3>question 2?</h3>
<input type="radio" value="one" name="question1_{{ i }}">a</input>
<input type="radio" value="two" name="question1_{{ i }}">b</input>
<input type="radio" value="three" name="question1_{{ i }}">c</input>
{% endmacro %}
{% for title, message in list %}
{{ create_block(title, message) }}
{% endfor %}
""")
print_html(template.render(list=zip(title, message)))
以上模板针对标题和消息列表中的元素数量创建了问题集。例如,对于title
中的两个元素,上述代码会生成两个不同的问卷集。但是,为了生成有效的 html 文档,我想改变 name="question1_{{ i }}
中的 {{i}}
参数。对于上述模板,预期输出如下所示:
<h1>
1 title
</h1>
<h3>
question?
</h3>
<input name="question1_1" type="radio" value="val1"/>
option A
<input name="question1_1" type="radio" value="val2"/>
option B
<h3>
question 2?
</h3>
<input name="question1_2" type="radio" value="one"/>
a
<input name="question1_2" type="radio" value="two"/>
b
<input name="question1_2" type="radio" value="three"/>
c
<h1>
2 title
</h1>
<h3>
question?
</h3>
<input name="question2_1" type="radio" value="val1"/>
option A
<input name="question2_1" type="radio" value="val2"/>
option B
<h3>
question 2?
</h3>
<input name="question2_2" type="radio" value="one"/>
a
<input name="question2_2" type="radio" value="two"/>
b
<input name="question2_2" type="radio" value="three"/>
c
在 Jinja 中,获得上述输出的正确方法是什么?复选框名称的索引不同?
您可以像传递其他参数一样将索引作为参数传递。
from jinja2 import Template
title = ['1 title', '2 title']
message = ['1 message', '2 message']
indices = list(range(len(title)))
template = Template(
"""
{% macro create_block(title, message, i) %}
<h1> {{title}} </h1>
<h3>question?</h3>
<input type="radio" value="val1" name="question1_{{ i }}">option A</input>
<input type="radio" value="val2" name="question1_{{ i }}">option B</input>
<h3>question 2?</h3>
<input type="radio" value="one" name="question1_{{ i }}">a</input>
<input type="radio" value="two" name="question1_{{ i }}">b</input>
<input type="radio" value="three" name="question1_{{ i }}">c</input>
{% endmacro %}
{% for title, message, i in list %}
{{ create_block(title, message, i) }}
{% endfor %}
""")
print_html(template.render(list=zip(title, message, indices)))