私はジンジャとフラスコにとても慣れていません
現在のページを示すために、ナビゲーションバーで異なる背景色を設定したいと思います。
現在のHTMLページを返す組み込みのJinja変数またはメソッドはありますか?可能であれば、Pythonファイルと通信する必要のないコードが必要です。
したがって、現在index.html
にいる場合は、「index」または「index.html」が返されます。
テンプレートのナビゲーションコードは次のとおりです。
<ul>
{% for item in navigation %}
<a href="{{url_for(item.route)}}">
<li>
{{item.text}}
</li>
</a>
{% endfor %}
</ul>
if
ステートメントを追加して、現在のページがclass
を持つ<li>
を取得するようにします。
{% if ??? %}
<li class="current">
...
</li>
{% else %}
...
{% endif %}
ありがとうございました
あなたの問題のためのjinja2ドキュメントにトリックがあります: http://jinja.pocoo.org/docs/tricks/
リストが十分に単純で、リクエストオブジェクトを使用するだけの場合は、次のようになります。
<li {% if request.endpoint == item.endpoint %} class='active' {% endif %}>
<a href="{{url_for(endpoint)}}">{{item.text}}</a>
</li>
通常、私はこのスニペットを、active
を設定するための明示的な引数を使用してマクロに書き込みます。
{% macro render_sitem(endpoint, display, cls='', icon-cls='', active='') %}
<li {% if request.endpoint == endpoint or active == endpoint %} class='active' {% endif %}>
<a class='{{cls}}' href="{{url_for(endpoint)}}"><i class="{{icon-cls}}"></i> {{display}}</a>
</li>
{% endmacro %}
リストは次のようになります。
<ul class="nav nav-list">
{{render_sitem('page.index', _('Pages'), icon-cls='icon-sitemap', active=active_page)}}
{{render_sitem('post.index', _('Posts'), icon-cls='icon-file', active=active_page)}}
{{render_sitem('user.index', _('Users'), icon-cls='icon-group', active=active_page)}}
</ul>
したがって、リストを拡張または含む子ページがある場合は、次のようなアクティブなアイテムを設定できます。
{% set active_page = 'page.index' %}
子ページの上部にあります。
ピラミッド1.5には、Flaskのrequest.endpointのようなメソッドはありません。
カスタムフィルターget_endpointを使用します
request.path | get_endpoint
jinja2_custom_filters.py:
from pyramid_jinja2 import Environment
def get_endpoint(str):
"""
:param str:
:return:
"""
return str.split('/')[-1]
env = Environment()
env.filters['get_endpoint'] = get_endpoint
およびdevelopment.ini:
jinja2.filters =
model_url = pyramid_jinja2.filters:model_url_filter
route_url = pyramid_jinja2.filters:route_url_filter
static_url = pyramid_jinja2.filters:static_url_filter
get_endpoint = path to ... jinja2_custom_filters.get_endpoint
多分それは誰かに役立つでしょう:)