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>
ブロックはカウンター値に依存すると思いますが、代わりにすべてが変わります。
このバグがトリガーされた原因が気になります
block
このような条件では、条件が満たされているかどうかに関係なく、block
子テンプレートに含まれるとすぐに使用できなくなります。
あなたが望むものを達成するためのいくつかの方法があります(私が想定していることです)、例えばあなたはマクロを使うことができます:
{% 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 %}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加