【问题标题】:Jinja2 templating with components? blocks? templates?Jinja2 模板与组件?块?模板?
【发布时间】:2017-07-15 00:00:23
【问题描述】:

jinja2 模板的一个小问题: 我想创建一个可重用的模板来包含然后覆盖块。宏不会让我轻松编写 HTML 的垃圾作为参数,是吗?假设我想多次重用包含,并且在我想动态分配的块中使用大量 HTML 垃圾 我该怎么做?

我猜肯定不是宏,还是我错了?

{% render_foo('bar',2) %} 很好

{% render_foo('<table><tr><th>something</th><th>somethingelse</th></tr><tbody><tr>....etc') %} 已经不行了是不是

“你真正想做什么?”

是的,我告诉过你,我有一种方法可以为我的数据创建容器。容器总是一样的。每种用法的内容完全不同。一次一桌。曾经是一个引导组件。一次表格。

周围的元素总是一样的

为了重现这个简单的错误,我就是这样做的:

 {% include 'full_section.html' %}
  {% block fullsection %} <table><tr><th>something</th><th>somethingelse</th></tr><tbody><tr>....etc{% endblock %}

  {% include 'full_section.html' %}
  {% block fullsection %} <form>//some cool LONG big form </form>{% endblock %}

full_section.html 内容只是为了完整性,实际上要复杂得多

<div class="my_cool_full_section">
{% block full_section %}{% endblock %}
</div>

TemplateAssertionError: block 'fullsection' 定义了两次

【问题讨论】:

    标签: django jinja2


    【解决方案1】:

    我在 jinja2 文档中找到了答案很好地隐藏

    http://jinja.pocoo.org/docs/2.9/templates/#block-assignments

    所以你使用宏和块赋值,例如像这样:

    {% set section_content %}
    <table><tr><td>etc</td> <td>etc</td> <td>etc</td></tr></table>
    <table><tr><td>etc</td> <td>etc</td> <td>etc</td></tr></table>
    <table><tr><td>etc</td> <td>etc</td> <td>etc</td></tr></table>
      {% endset %}
      {{  render_full_size_section(section_content)  }}
    
    
      {% set section_content %}
      aaaaaaaaaaa
        {% endset %}
        {{  render_full_size_section(section_content)  }}
    

    想知道他们在 2.8 之前在做什么......黑暗黑暗的中年

    然后在宏中:

    {% macro render_full_size_section(content) %}
    <div class="mycoolsection">
      {{ content | safe }}
    </div>
    {% endmacro %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 2021-09-12
      • 2011-06-15
      相关资源
      最近更新 更多