【问题标题】:Getting a dict of all the blocks in a Jinja2 template获取 Jinja2 模板中所有块的字典
【发布时间】:2012-04-05 21:45:39
【问题描述】:

假设我有一些 Jinja2 模板,其中包含几个块:

{% block A %}Blah{% endblock %}
{% block B %}whatever{% endblock %}
{% block C %}you get the idea{% endblock %}

我想要一个 Python 函数,它将它变成一个 dict(或 JSON,或其他),每个块都有一个条目。所以输出会是这样的:

{'A': 'Blah', 'B': 'whatever', 'C': 'you get the idea'}

是否有既定的方法来做到这一点?

我之所以这样问,是因为我希望通过 AJAX 更新我的应用程序页面,而不是在保持向后兼容性的同时重新加载。如果我可以解析我的 Jinja2 模板块,那么我可以使用完全相同的模板文件轻松生成整个页面或部分页面。那么,作为一个辅助问题......有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: python jinja2


    【解决方案1】:

    您可以查看@987654321@ 字段。它具有块渲染功能的字典。

    块渲染函数在使用上下文(我猜)作为参数调用时返回生成器。

    希望下面的代码 sn-p 对你有帮助。

    对于 key,在 template.blocks.iteritems() 中的 blockfun: 打印键, ':', ''.join(blockfun({}))

    结果是:

    答:废话 C:你明白了 B:随便

    【讨论】:

      【解决方案2】:

      这似乎有效:

      from jinja2 import Template
      from jinja2.utils import concat
      
      t = """{% block A %}Blah{% endblock %}
      {% block B %}whatever {{ a }}{% endblock %}
      {% block C %}you get the idea{% endblock %}
      """
      
      template = Template(t)
      context = template.new_context({'a': 'AAAAAAAA'})
      A = concat(template.blocks['A'](context))
      B = concat(template.blocks['B'](context))
      C = concat(template.blocks['C'](context))
      
      print A
      print B
      print C
      

      这给了我三个块中的每一个,呈现在三个单独的变量中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-29
        • 2020-08-27
        • 1970-01-01
        • 2018-03-19
        • 2016-09-22
        • 1970-01-01
        • 2016-07-18
        相关资源
        最近更新 更多