【问题标题】:Django equivalent to mako's callable blocksDjango 相当于 mako 的可调用块
【发布时间】:2012-06-14 09:56:23
【问题描述】:

是否有 Django 等效于 Mako 的可调用块?

在 Mako 中,如果我想重用某个特定的 HTML,我可以将它放在一个“可调用块”中,该块可以从模板中的多个位置调用。

<%def name="makerow(row)">
    <tr>
    % for name in row:
        <td>${name}</td>\
    % endfor
    </tr>
</%def>

Django 有类似的东西吗?

【问题讨论】:

    标签: python django django-templates mako


    【解决方案1】:

    在 Django 中,您可以包含其他 HTML 模板来完成此操作:

    {% include "main/includes/subtemplate.html" %}
    

    您可以在包含的模板中访问与包含它的父模板中相同的变量。这允许您在模板中的多个位置重用 HTML。

    另一种方法是创建自定义模板标签:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ 这允许您创建自己的标签来生成 HTML 输出。 Django 文档提供了有关如何执行此操作的各种示例。

    【讨论】:

    • 不必为每个“模板函数”创建新文件会很方便。
    • +1 用于模板标签,虽然它并不像人们想象的那么容易,因为您需要在不转换 django 变量的情况下提取标签的内容,然后稍后重新渲染内容。
    • Django 模板是有意限制性的,因为原则是你不应该在模板中做这样的事情。不管你是否同意(我同意),Django 就是这样。您的资源是模板包含和模板标签,它们为您提供几乎相同的功能,而不会弄乱模板。
    • 我自己首先想到了模板标签。例如,您有针对特定模型 Foo 的函数 get_related。 {% get_related %} 可以使用您需要的信息填充您的模板。更多资源密集型,但有时是必要的,是创建您自己的自定义上下文处理器。请注意,尽管这在大多数情况下效率不高,并且上下文处理器是 Django 模板语言速度减慢/瓶颈的主要原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2018-05-19
    • 2011-06-03
    • 2017-01-11
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多