2015-04-13 2 views
0

Я использую tornadoweb для создания веб-сервиса. У меня есть два разных шаблона, содержащий html head, навигационную панель и весь пользовательский интерфейс, который является общим для всех страниц сервера службой. Первый, base.html содержит элементы навигационной панели и другие элементы html, отображаемые только для прошедших проверку подлинности пользователей. Второй, base_anon.html легче и содержит несколько элементов, доступных анонимным пользователям.Pornon торнадо, условное расширение шаблона

Теперь я создаю третий шаблон, который будет содержать фактическое содержимое страницы. Я хотел бы, чтобы этот шаблон расширил либо base_anon.html, либо base.html в зависимости от того, аутентифицирован пользователь или нет. Переменная user будет Falsy, если пользователь не аутентифицирован. Есть ли способ сделать условное расширение шаблона?

Я попробовал следующее:

{% if user %} 
    {% extends "base.html" %} 
{% else %} 
    {% extends "base_anon.html" %} 
{% end %} 

который, когда оказывает Торнадо генерирует следующий трассировки стека (скопированный только конец стека):

Traceback (most recent call last): 
    [...] 
    File "[...]/lib/python2.7/site-packages/tornado/template.py", line 291, in _generate_python 
    ancestors[0].generate(writer) 
    File "[...]/lib/python2.7/site-packages/tornado/template.py", line 416, in generate 
    self.body.generate(writer) 
    File "[...]/lib/python2.7/site-packages/tornado/template.py", line 429, in generate 
    chunk.generate(writer) 
    File "[...]/lib/python2.7/site-packages/tornado/template.py", line 510, in generate 
    self.body.generate(writer) 
    File "[...]/lib/python2.7/site-packages/tornado/template.py", line 429, in generate 
    chunk.generate(writer) 
    File "[...]/lib/python2.7/site-packages/tornado/template.py", line 398, in generate 
    raise NotImplementedError() 
NotImplementedError 

У меня нет больше информации чтобы это могло объяснить эту ошибку. Я также не мог найти никакой информации в docs о конфликте между if и extends заявлениями. Любая идея, почему эта ошибка появляется? Если это действительно ожидаемо, как еще я могу использовать другой базовый шаблон в зависимости от значения некоторой переменной?

Спасибо за чтение!

ответ

0

В настоящее время невозможно выполнить то, о чем вы просите. Если используется директива {% extends %}, она должна отображаться на верхнем уровне, и ее аргумент должен быть константой; нет способа изменить шаблон, который вы распространяете.

Вместо этого рассмотрите возможность использования разных шаблонов верхнего уровня в зависимости от того, есть ли вошедший в систему пользователь или нет, и инкапсулировать общие элементы в UIModules. Или поместите все директивы {% if %} в базовый шаблон, возможно, вокруг определений {% block %}.

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