Ответ 1
Пока вы импортировали request
, request.path
должна содержать эту информацию.
В шаблоне, как мне получить, на какой странице я сейчас? Я бы предпочел не передавать переменную типа 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>
Пока вы импортировали request
, request.path
должна содержать эту информацию.
Первый запрос на импорт из фляжки в вашем приложении. Затем вы можете использовать его без перехода к шаблону:
<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>
Использование 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>
Удачи!
Чтобы избежать использования жестко закодированных 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():
Попробуйте
<li {% if request.endpoint == "blueprintname.routename" %}class="active"{% endif %}>Home</li>
Это работало для меня.
Вы также можете использовать .split, если в вашем URL-адресе есть что-то еще.
Пример:
/
продукт
/Продукт/добавить
/Продукта /32432/редактировать
/Продукт/32 432/вид
{{ request.path.split('/')[1] }}
Это вернет только "продукт"