2012-07-26 80 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 

也许它对某人有用:)