我想用同样的{% 堵塞 %}在同一个 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(使用前将#替换为@)