Колба: текуща страница в променливата на заявката

В шаблон, как да получа страницата, на която съм в момента? Предпочитам да не предавам променлива като page, особено когато знам, че някои request.xxx могат да ми предоставят информацията.

<li {% if page=="home" %}class="active"{% endif %}>                   
    <a href="/bg/">Home</a>                                                
</li>                                                                 
<li {% if page=="about" %}class="active"{% endif %}>                  
    <a href="/bg/about">About</a>                                          
</li> 

person atp    schedule 30.12.2011    source източник


Отговори (6)


Докато сте импортирали request, request.path трябва да съдържа тази информация.

person ranksrejoined    schedule 30.12.2011
comment
Имайте предвид, че това не е вярно за други променливи. Работи, защото request е една от променливите, вмъкнати по подразбиране в контекста на шаблона. - person Marcel M; 25.03.2013

Използването на request.path не изглежда подходящ подход, тъй като ще трябва да актуализирате пътищата в случай на промяна на правилата за URL адреси или разполагане на вашия сайт под подпапка.

Вместо това използвайте request.url_rule.endpoint, той съдържа действително име на крайна точка, независимо от действителния път:

(Pdb) request.url_rule.endpoint
'myblueprint.client_pipeline'

В шаблон:

<li {% if request.url_rule.endpoint == "myblueprint.client_pipeline" %}class="active"{% endif %}>Home</li>

Късмет!

person negus    schedule 29.07.2014
comment
Това е правилният отговор. Другите използват твърдо кодирани пътища, което е много лоша идея. - person Nathan Osman; 09.12.2014
comment
Това работи само ако използвате един маршрут на раздел от страницата. В противен случай това няма да е това, което търсите. =\ - person flamusdiu; 28.05.2015
comment
Не, това не е вярно. Можете да имате някаква структура в имената на вашите крайни точки (като blueprint.subsection.page) и да направите сравнението с помощта на .startswith('blueprint.subsection.'). Само пример. - person negus; 29.05.2015

Първа заявка за импортиране от колба във вашето приложение. След това можете да го използвате, без да преминавате към шаблон:

<li {%- if request.path == "/home" %} class="active"{% endif %}>
    <a href="/bg/">Home</a>
</li>
<li {%- if request.path=="/about" %} class="active"{% endif %}>
    <a href="/bg/about">About</a>
</li>
person Sosiska    schedule 03.01.2012
comment
request импортиран (във *.py файл), все още получава грешка: jinja2.exceptions.UndefinedError: 'request' is undefined - person Pavel Vlasov; 10.02.2018

За да избегнете използването на твърдо кодирани URL адреси, можете да използвате функцията url_for по следния начин:

{% for ni in ['index', 'foo', 'bar', 'baz'] %}
<li {%- if request.path == url_for(ni) %} class="active"{% endif %}><a href="/bg{{ url_for(ni) }}">{{ ni | capitalize }}</a></li>
{% endfor %}

В този случай index, foo, bar и baz биха били имена на функции, използвани по този начин във вашия код на Python:

@app.route('/')
def index():
person MoepMan    schedule 14.03.2016

Опитвам

<li {% if request.endpoint == "blueprintname.routename" %}class="active"{% endif %}>Home</li>

Този ми свърши работа.

person iChux    schedule 16.07.2015

Можете също да използвате .split, ако URL адресът ви съдържа още неща.

Пример:

/product
/product/add
/product/32432/edit
/product/32432/view

{{ request.path.split('/')[1] }}

Това ще върне само „продукт“

person Iaron    schedule 01.09.2019