2012-07-26 75 views
18

我很新Jinja和FlaskJinja - 有沒有內置的變量來獲取當前的HTML頁面名稱?

我想在導航欄中設置不同的背景顏色來表示當前頁面。

是否有任何內置的Jinja變量或方法返回當前的HTML頁面?如果可能的話,我想要不需要與Python文件進行通信的代碼。

所以,如果我在index.html目前是,它會返回「指數」或「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 %} 

謝謝

+2

可能的重複http://stackoverflow.com/q/11157631/388916 – Hubro 2012-07-26 08:48:23

回答

32

有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' %} 

4

在金字塔1.5中,沒有像Flask中的request.endpoint這樣的方法。

我們使用自定義過濾器get_endpoint

Request的| 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 

也許它對某人有用:)