我用的是Jinja + Flask
示例代码如下:
# Flask
@app.route('/test/<int:counter>'):
return render_templates('test.html', counter)
# Jinja
## test.html
{% extends "layout.html" %}
{% if counter|int == 1 %}
{% block scoreboard1 %}active1{% endblock %}
{% elif counter|int == 2 %}
{% block scoreboard2 %}active2{% endblock %}
{% elif counter|int == 3 %}
{% block scoreboard3 %}active3{% endblock %}
{% else %}
{% endif %}
## layout.html
<a href="/scoreboard/1" class="{% block scoreboard1 %}{% endblock %} item">1</a>
<a href="/scoreboard/2" class="{% block scoreboard2 %}{% endblock %} item">2</a>
<a href="/scoreboard/3" class="{% block scoreboard3 %}{% endblock %} item">3</a>
下面是结果(在chrome dev工具中检查):
# URL -> 127.0.0.1/test/2
<a href="/scoreboard/1" class="active1 item">1</a>
<a href="/scoreboard/2" class="active2 item">2</a>
<a href="/scoreboard/3" class="active3 item">3</a>
预期结果:
# URL -> 127.0.0.1/test/2
<a href="/scoreboard/1" class=" item">1</a>
<a href="/scoreboard/2" class="active2 item">2</a>
<a href="/scoreboard/3" class=" item">3</a>
我期望块将依赖于计数器值,但实际上,它改变了这一切。
我有点好奇是什么引起了这个bug
发布于 2018-09-10 03:26:29
你不能在这样的条件中使用block
,不管条件是否满足,只要你的block
在你的子模板中,它就会被填充。
有几种方法可以实现(我假设是)您想要的东西,例如,您可以使用macro
{% macro scoreboardlink(counter) %}
<a href="/scoreboard/1" class="{% if counter|int == 1 %}active1{% endif %} item">1</a>
<!-- you should look into url_for() instead of hardcoding your urls -->
...
{%- endmacro %}
然后在您的模板中使用如下代码:
...
{{ scoreboardlink(counter) }}
...
但是,如果你想要你已经拥有的结构layout.html
,你当然可以稍微调整一下,并将条件放在你的代码块中:
{% block scoreboard1 %}
{% if counter|int == 1 %}active1{% endif %}
{% endblock %}
https://stackoverflow.com/questions/52247510
复制相似问题