我试图编写一个简单的jinja2
扩展,它将在页面中呈现一个带有一些属性和内容属性的<meta>
标记。看起来像这样:
from jinja2 import nodes
from jinja2.ext import Extension
class MetaExtension(Extension):
"""
returns a meta tag of key, value
>> env = jinja2.Environment(extensions=[MetaExtension])
>> env.from_string('{% meta "key", "value" %}').render()
u'<meta property="keyword" content="value" />'
"""
# we'll use it in the template with
tags = set(['meta'])
def __init__(self, environment):
super(MetaExtension, self).__init__(environment)
def parse(self, parser):
tag = parser.stream.next()
args = [parser.parse_expression()]
if parser.stream.skip_if('comma'):
args.append(parser.parse_expression())
return nodes.Output([self.call_method('_render', args)]).set_lineno(tag.lineno)
def _render(self, *args):
return '<meta property="{}" content="{}" />'.format(args[0], args[1])
meta = MetaExtension
在烧瓶应用程序中使用:
^{pr2}$以及
<!-- use it in the template -->
<head>
{% meta "key", "value" %}
</head>
虽然标记在控制台中呈现得很好,但是当我在flask应用程序中使用它时,它会跳过html并将转义的标记输出到页面。所以,不是
<meta property="keyword" content="value" />
我明白了
<meta property="key" content="value" />
我做错什么了?谢谢。在
原来我应该用
nodes.CallBlock
而不是nodes.Output
。应用该更改,parse
和_render
函数如下所示:希望这对某些人有所帮助,因为Jinja2扩展引用(尤其是对于非块标记)不容易获得:)
这段代码产生。。。在
试试这个。。。在
^{pr2}$希望这有帮助!在
相关问题 更多 >
编程相关推荐