21

私はJinjaとFlaskに非常に慣れていません

現在のページを示すために、ナビゲーション バーに別の背景色を設定したいと考えています。

現在の 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を取得するようにステートメントを追加したい<li>class

{% if ??? %}
   <li class="current">
   ...
   </li>
{% else %}
   ...
{% endif %}

ありがとうございました

4

3 に答える 3

38

あなたの問題に対する 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> 

通常、このスニペットを set への明示的な引数とともにマクロに書き込みます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' %} 

子ページの上部にあります。

于 2012-07-26T09:04:04.910 に答える
5

ピラミッド 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

多分それは誰かに役立つでしょう:)

于 2015-01-09T08:42:14.627 に答える
1

Flask 2.0.1 では、requestオブジェクトはテンプレートで使用できます。request.pathこれで簡単に属性を使ったページのチェックができます。

チェックの例は次のようになります。

{% if request.path == "/" %}
  <h1>You are at the root</h1>
{% endif %}
于 2021-10-06T20:12:24.390 に答える