プロパティとコンテンツ属性を持つページにタグを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
フラスコアプリで使用する:
# register the extension in the app file
from flask import Flask
app = Flask(__name__)
app.jinja_env.add_extension('flask_meta.MetaExtension')
と
<!-- use it in the template -->
<head>
{% meta "key", "value" %}
</head>
タグはコンソールで正常にレンダリングされますが、flask アプリケーションで使用すると、html がエスケープされ、エスケープされたタグがページに出力されます。だから、代わりに
<meta property="keyword" content="value" />
私は得る
<meta property="key" content="value" />
私は何を間違っていますか?ありがとう。