2015-04-27 4 views
0

Мой шаблон макета содержит заголовок, и я хотел бы добавить класс CSS к выбранному в данный момент параметру меню.Как установить переменную из шаблона

class="active" 

Я думал, что я нашел решение here, но я все еще возникают проблемы. Когда я вставляю следующий код в свой шаблон, я получаю ошибку сервера.

{% rule = request.url_rule %} 

Почему это не работало? Как настроить переменную для управления меню в шаблонах?

+0

Какая ошибка? – SwankSwashbucklers

+0

500 Внутренняя ошибка сервера –

+0

Да, но на сервере что регистрируется? – SwankSwashbucklers

ответ

3

{% rule = request.url_rule %} не действует синтаксис в Джиндже. Если вы хотите установить переменный контекст из шаблона, используйте set:

{% set rule = request.rule %} 

request уже передаются в каждый контекст шаблона автоматически, вам не нужно, чтобы передать его в render_template.

1

Мое лучшее предположение заключается в том, что объект запроса не передается шаблону. Если он не передается, вы не сможете получить к нему доступ при визуализации шаблона. Вы можете передать его в явном виде, который будет выглядеть примерно так:

from flask import request 
from flask import render_template 

@app.route('/hello/') 
def hello(): 
    return render_template('hello.html', request=request) 
+1

или даже лучше просто добавьте оболочку контекста что делает запрос доступным для всех просмотров. –

+1

Не знаете, как это устранило проблему, так как объект 'request' автоматически становится доступным для шаблонов Flask. – davidism

1

Кто-то сказал, что ответ swankswashbucklers не исправит мою проблему, поэтому я отправляю свое решение, которое было вдохновлено его предложением.

Я просто вручную устанавливаю переменную под названием title при создании представления.

def home(): 
return render_template(
    'index.html', 
    title='Home', 
) 

Внутри шаблона я ссылался на переменную, чтобы определить, какой элемент меню выделить.

    {% if title == "Home" %} 
        <li class="active"> 
        {% else %} 
        <li> 
        {% endif %} 

Оказалось, что в моей ситуации мне не нужен доступ к текущему URL-адресу.

Смежные вопросы