2012-07-26 30 views
18

Tôi rất mới với Jinja và FlaskJinja - Có bất kỳ biến tích hợp nào để lấy tên trang HTML hiện tại không?

Tôi muốn đặt màu nền khác nhau trong thanh điều hướng để cho biết trang hiện tại.

Có bất kỳ biến Jinja hoặc phương thức tích hợp nào trả về các trang HTML hiện tại không? Nếu có thể, tôi muốn mã không cần phải giao tiếp với tệp Python.

Vì vậy, nếu tôi hiện đang ở index.html, nó sẽ trở lại "chỉ số" hoặc "index.html"

Đây là mã chuyển hướng của tôi trong mẫu của tôi:

<ul> 
    {% for item in navigation %} 
     <a href="{{url_for(item.route)}}"> 
     <li> 
      {{item.text}} 
     </li> 
     </a> 
    {% endfor %} 
</ul> 

Tôi muốn thêm if tuyên bố vì vậy các trang hiện tại sẽ nhận được <li>class

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

cảm ơn

+2

Bản sao có thể có của http://stackoverflow.com/q/11157631/388916 – Hubro

Trả lời

32

Có một trick trong tài liệu jinja2 cho vấn đề của bạn: http://jinja.pocoo.org/docs/tricks/

Nếu danh sách của bạn là đơn giản đủ, chỉ cần sử dụng đối tượng yêu cầu, một cái gì đó như thế:

<li {% if request.endpoint == item.endpoint %} class='active' {% endif %}> 
    <a href="{{url_for(endpoint)}}">{{item.text}}</a> 
</li> 

Thông thường, tôi viết đoạn này để một macro với một cuộc tranh cãi rõ ràng để thiết 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 %} 

danh sách này sẽ là một cái gì đó như:

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

Vì vậy, nếu bạn có một trang con mà kéo dài hoặc bao gồm danh sách của bạn, bạn có thể đặt mục hoạt động như:

{% set active_page = 'page.index' %} 

trong top of the page con quý vị.

4

Trong kim tự tháp 1.5 không có phương thức như request.endpoint trong Flask.

Chúng tôi sử dụng tùy chỉnh bộ lọc 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 

và trong 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 

Có thể nó sẽ hữu ích cho ai đó :)

Các vấn đề liên quan