Flask: текущая страница в переменной запроса - PullRequest
57 голосов
/ 30 декабря 2011

Как узнать, на какой странице я сейчас работаю? Я бы предпочел не передавать переменную типа page, особенно когда я знаю, что некоторые request.xxx могут предоставить мне информацию.

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

Ответы [ 5 ]

60 голосов
/ 30 декабря 2011

Пока вы импортировали request, request.path должна содержать эту информацию.

46 голосов
/ 03 января 2012

Первый запрос на импорт из колбы в вашем приложении. Тогда вы можете использовать его, не переходя на шаблон:

<li {%- if request.path == "/home" %} class="active"{% endif %}>
    <a href="/">Home</a>
</li>
<li {%- if request.path=="/about" %} class="active"{% endif %}>
    <a href="/about">About</a>
</li>
43 голосов
/ 29 июля 2014

Использование 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>

Удачи!

6 голосов
/ 14 марта 2016

Чтобы избежать использования жестко закодированных URL-адресов, вы можете использовать функцию url_for, например:

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

В этом случае index, foo, bar и baz будут именами функций, которые используются в вашем коде Python следующим образом:

@app.route('/')
def index():
3 голосов
/ 16 июля 2015

Попробуйте

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

Этот работал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...