如何在 django 模板中重复“块”

2024-02-07

我想用同样的{% 堵塞 %}在同一个 django 模板中两次。我希望此块在我的基本模板中多次出现:

# base.html
<html>
    <head>
        <title>{% block title %}My Cool Website{% endblock %}</title>
    </head>
    <body>
        <h1>{% block title %}My Cool Website{% endblock %}</h1>
    </body>
</html>

然后扩展它:

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}

# pictures.html
{% extends 'base.html' %}
{% block title %}My Pictures{% endblock %}

# cats.html
{% extends 'base.html' %}
{% block title %}My Cats{% endblock %}

我会得到一个异常,因为 Django 希望该块仅出现一次:

模板语法错误位于 /

出现名称为“title”的“block”标签 不止一次

一个快速但肮脏的解决方案是复制块title into title1 and title2:

# blog.html
{% extends 'base.html' %}
{% block title1 %}My Blog{% endblock %}
{% block title2 %}My Blog{% endblock %}

但这违反了DRY http://docs.djangoproject.com/en/dev/misc/design-philosophies/#don-t-repeat-yourself-dry原则。这将非常困难,因为我有很多继承模板,而且因为我不想下地狱;-)

这个问题有什么技巧或解决方法吗?如何在模板中重复相同的块,而不复制所有代码?


使用 Django 模板宏插件:

https://gist.github.com/1715202 https://gist.github.com/1715202(Django >= 1.4)

or

http://www.djangosnippets.org/snippets/363/ http://www.djangosnippets.org/snippets/363/(Django

Django >= 1.4

# base.html
{% kwacro title %}
    {% block title %}My Cool Website{% endblock %}
{% endkwacro %}

<html>
    <head>
        <title>{% usekwacro title %}</title>
    </head>
    <body>
        <h1>{% usekwacro title %}</h1>
    </body>
</html>

and

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}

Django

# base.html
{% macro title %}
    {% block title %}My Cool Website{% endblock %}
{% endmacro %}

<html>
    <head>
        <title>{% usemacro title %}</title>
    </head>
    <body>
        <h1>{% usemacro title %}</h1>
    </body>
</html>

and

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 django 模板中重复“块” 的相关文章

随机推荐