1

プロパティとコンテンツ属性を持つページにタグを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" />

私は得る

&lt;meta property=&#34;key&#34; content=&#34;value&#34; /&gt;

私は何を間違っていますか?ありがとう。

更新: 以下の私の回答を参照してください。

4

2 に答える 2