首页 > 代码库 > 修改jinja2模板中变量标识符
修改jinja2模板中变量标识符
使用webpy时,修改jinja2变量标识符
重写webpy包中的template.py文件中的render_jinja类.
class my_render_jinja: """Rendering interface to Jinja2 Templates Example: render= render_jinja(‘templates‘) render.hello(name=‘jinja2‘) """ def __init__(self, *a, **kwargs): extensions = kwargs.pop(‘extensions‘, []) globals = kwargs.pop(‘globals‘, {}) from jinja2 import Environment, FileSystemLoader self._lookup = Environment(loader=FileSystemLoader(*a, **kwargs), extensions=extensions) # 添加下面两句代码,修改标识符 self._lookup.variable_start_string = ‘{{ ‘ self._lookup.variable_end_string = ‘ }}‘ self._lookup.globals.update(globals) def __getattr__(self, name): # Assuming all templates end with .html path = name + ‘.html‘ t = self._lookup.get_template(path) return t.render
有其它方式吗?
jinja2的变量标识符可以通过以下方式访问到,但是无法被修改
# 可以通过以下方式访问 import jinja2 jinja2.defaults.VARIABLE_START_STRING jinja2.defaults.VARIABLE_END_STRING jinja2.environment.VARIABLE_START_STRING jinja2.environment.VARIABLE_END_STRING # 使用以下方式赋值均无效 jinja2.defaults.VARIABLE_START_STRING = ‘{{ ‘ jinja2.defaults.VARIABLE_END_STRING = ‘ }}‘ jinja2.environment.VARIABLE_START_STRING = ‘{{ ‘ jinja2.environment.VARIABLE_END_STRING = ‘ }}‘
为什么无效?
原因是导入jinja2时,执行了jinja2包中的__init__.py文件,而__init__.py中导入Environment对象
Environment对象的构造函数__init__(variable_start_string=VARIABLE_START_STRING,variable_end_string=VARIABLE_END_STRING,...)有默认值
默认值在Environment被导入时,已经固定,之后无法被修改
所以使用赋值的方式无效
了解原因后,可以找到另外一种方法,在import前设置
__docformat__ = ‘restructuredtext en‘ __version__ = ‘2.7.2‘ # high level interface # 在此处添加下面三句代码 import defaults defaults.VARIABLE_START_STRING = ‘{{ ‘ defaults.VARIABLE_END_STRING = ‘ }}‘ from jinja2.environment import Environment, Template # loaders from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader, ModuleLoader
修改jinja2模板中变量标识符
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。