Python 龙卷风,条件模板扩展
Python tornado, conditional template extension
我正在使用 tornadoweb 构建网络服务。我有两个不同的模板,其中包含 html head
、导航栏和所有页面服务器通用的 UI。第一个 base.html
包含导航栏项和其他 html 元素,仅显示给经过身份验证的用户。第二个 base_anon.html
更轻,包含一些可供匿名用户使用的项目。
现在我正在创建第三个模板,它将包含页面的实际内容。我希望此模板根据用户是否经过身份验证来扩展 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
语句之间冲突的任何信息。知道为什么会出现此错误吗?如果这确实是预期的,我还可以根据某些变量的值使用不同的基本模板吗?
感谢阅读!
目前无法执行您要求的操作。如果使用 {% extends %}
指令,它必须出现在顶层并且它的参数必须是常量;无法更改您要扩展的模板。
相反,考虑根据是否有登录用户使用不同的顶级模板,并将公共元素封装在UIModules
中。或者将所有 {% if %}
指令放在基本模板中,也许围绕 {% block %}
定义。
我正在使用 tornadoweb 构建网络服务。我有两个不同的模板,其中包含 html head
、导航栏和所有页面服务器通用的 UI。第一个 base.html
包含导航栏项和其他 html 元素,仅显示给经过身份验证的用户。第二个 base_anon.html
更轻,包含一些可供匿名用户使用的项目。
现在我正在创建第三个模板,它将包含页面的实际内容。我希望此模板根据用户是否经过身份验证来扩展 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
语句之间冲突的任何信息。知道为什么会出现此错误吗?如果这确实是预期的,我还可以根据某些变量的值使用不同的基本模板吗?
感谢阅读!
目前无法执行您要求的操作。如果使用 {% extends %}
指令,它必须出现在顶层并且它的参数必须是常量;无法更改您要扩展的模板。
相反,考虑根据是否有登录用户使用不同的顶级模板,并将公共元素封装在UIModules
中。或者将所有 {% if %}
指令放在基本模板中,也许围绕 {% block %}
定义。