Python 龙卷风,条件模板扩展

Python tornado, conditional template extension

我正在使用 tornadoweb 构建网络服务。我有两个不同的模板,其中包含 html head、导航栏和所有页面服务器通用的 UI。第一个 base.html 包含导航栏项和其他 html 元素,仅显示给经过身份验证的用户。第二个 base_anon.html 更轻,包含一些可供匿名用户使用的项目。

现在我正在创建第三个模板,它将包含页面的实际内容。我希望此模板根据用户是否经过身份验证来扩展 base_anon.htmlbase.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 中找到有关 ifextends 语句之间冲突的任何信息。知道为什么会出现此错误吗?如果这确实是预期的,我还可以根据某些变量的值使用不同的基本模板吗?

感谢阅读!

目前无法执行您要求的操作。如果使用 {% extends %} 指令,它必须出现在顶层并且它的参数必须是常量;无法更改您要扩展的模板。

相反,考虑根据是否有登录用户使用不同的顶级模板,并将公共元素封装在UIModules中。或者将所有 {% if %} 指令放在基本模板中,也许围绕 {% block %} 定义。