如何在扩展另一个文件的django模板中使用带有动态内容的html块片段?
有人能帮我找到一种在Django模板中实现以下内容(见下面的代码片段)的方法吗?我知道您不能使用多个扩展,但我是django新手,我不知道这样的东西的正确语法。我希望能够做到这一点,这样我就可以出于css的原因使用嵌套的div布局,而不必每次都这样键入,也不必冒打字错误的风险。换句话说,我希望能够让页面模板扩展我的base.html文件,然后使用动态模板内容的html片段(即循环模板或其他模板逻辑设备,而不仅仅是我从视图控制器设置的上下文变量)如何在扩展另一个文件的django模板中使用带有动态内容的html块片段?,django,templates,django-templates,template-engine,Django,Templates,Django Templates,Template Engine,有人能帮我找到一种在Django模板中实现以下内容(见下面的代码片段)的方法吗?我知道您不能使用多个扩展,但我是django新手,我不知道这样的东西的正确语法。我希望能够做到这一点,这样我就可以出于css的原因使用嵌套的div布局,而不必每次都这样键入,也不必冒打字错误的风险。换句话说,我希望能够让页面模板扩展我的base.html文件,然后使用动态模板内容的html片段(即循环模板或其他模板逻辑设备,而不仅仅是我从视图控制器设置的上下文变量) 编辑: 我希望能够在每个列中以任意方式显示任意内
编辑: 我希望能够在每个列中以任意方式显示任意内容。例如,我希望能够在一列中显示一组图像,然后在同一页面上显示另一组显示数据表的列。下面是我键入的一个示例:
我意识到示例图片中的所有文本都是从DjangoWebTester输出生成的,但每个coulmn都应该能够包含随机内容。它们应该是可嵌套的。对于默认的django模板语言,这可能吗
------------------------------------------------------------
base.html
------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>{% block title %}Title{% endblock %}</title>
</head>
<body>
<div class="wrapper">
<div class="header">
This is the common header
</div>
<div class="nav">
This is the common nav
</div>
{% if messages %}
<div class="messages">
<ul>
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
<div class="content">
{% block content %}Page Content{% endblock %}
</div>
<div class="footer">
This is the common footer
</div>
</div>
</body>
</html>
------------------------------------------------------------
columnlayout2.html
------------------------------------------------------------
<div class="twocol container2">
<div class="container1">
<div class="col1">
{% block twocol_col1 %}{% endblock %}
</div>
<div class="col2">
{% block twocol_col2 %}{% endblock %}
</div>
</div>
</div>
------------------------------------------------------------
columnlayout3.html
------------------------------------------------------------
<div class="threecol container3">
<div class="container2">
<div class="container1">
<div class="col1">
{% block threecol_col1 %}{% endblock %}
</div>
<div class="col2">
{% block threecol_col2 %}{% endblock %}
</div>
<div class="col3">
{% block threecol_col3 %}{% endblock %}
</div>
</div>
</div>
</div>
------------------------------------------------------------
page.html
------------------------------------------------------------
{% extends "base.html" %}
{% block content %}
{% extends "columnlayout2.html" %}
{% block twocol_col1 %}twocolumn column 1{% endblock %}
{% block twocol_col2 %}twocolumn column 2{% endblock %}
{% extends "columnlayout3.html" %}
{% block threecol_col1 %}threecol column 1{% endblock %}
{% block threecol_col2 %}threecol column 2{% endblock %}
{% block threecol_col3 %}threecol column 3{% endblock %}
{% endblock %}
------------------------------------------------------------
page.html output
------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Title</title>
</head>
<body>
<div class="wrapper">
<div class="header">
This is the common header
</div>
<div class="nav">
This is the common nav
</div>
<div class="content">
<div class="twocol container2">
<div class="container1">
<div class="col1">
twocolumn column 1
</div>
<div class="col2">
twocolumn column 2
</div>
</div>
</div>
<div class="threecol container3">
<div class="container2">
<div class="container1">
<div class="col1">
threecol column 1
</div>
<div class="col2">
threecol column 2
</div>
<div class="col3">
threecol column 3
</div>
</div>
</div>
</div>
</div>
<div class="footer">
This is the common footer
</div>
</div>
</body>
</html>
------------------------------------------------------------
base.html
------------------------------------------------------------
{%block title%}标题{%endblock%}
这是公共标题
这是通用导航
{%if消息%}
{消息%中的消息为%s}
{{message}}
{%endfor%}
{%endif%}
{%block content%}页面内容{%endblock%}
这是常见的页脚
------------------------------------------------------------
columnlayout2.html
------------------------------------------------------------
{%block twocol_col1%}{%endblock%}
{%block-twocol\u-col2%}{%endblock%}
------------------------------------------------------------
columnlayout3.html
------------------------------------------------------------
{%block threecol\u col1%}{%endblock%}
{%block threecol_col2%}{%endblock%}
{%block threecol_col3%}{%endblock%}
------------------------------------------------------------
page.html
------------------------------------------------------------
{%extends“base.html”%}
{%block content%}
{%extends“columnlayout2.html”%}
{%block twocol_col1%}twocolumn column 1{%endblock%}
{%block twocol_col2%}twocolumn列2{%endblock%}
{%extends“columnlayout3.html”%}
{%block threecol_col1%}threecol列1{%endblock%}
{%block threecol_col2%}threecol列2{%endblock%}
{%block threecol_col3%}threecol列3{%endblock%}
{%endblock%}
------------------------------------------------------------
page.html输出
------------------------------------------------------------
标题
这是公共标题
这是通用导航
两列第1列
两列第2列
三列1
三列式第2列
三列式第3列
这是常见的页脚
我同意Daniel的观点,包含标签可能是您想要的,我认为您误解了它们,{%extends%}
如果内容是静态的或在上下文中,则可以使用{%include%}块,如
{% block content %}
{% include "columnlayout2.html" %}
{% include "columnlayout3.html" %}
{% endblock %}
因此,您可以将所需的内容存储在{{two_columns}}和{{two_columns}}中,并进行渲染
------------------------------------------------------------
columnlayout2.html
------------------------------------------------------------
<div class="twocol container2">
<div class="container1">
<div class="col1">
{{ two_columns[0] }}
</div>
<div class="col2">
{{ two_columns[1] }}
</div>
</div>
</div>
模板标签
@register.inclusion_tag("columns/two_columns.html")
def show_two_columns(columns):
return {'columns': columns}
two_columns.html
<div class="twocol container2">
<div class="container1">
<div class="col1">
{% render_column columns[0] %}
</div>
<div class="col2">
{% render_column columns[1] %}
</div>
</div>
</div>
{%render_列[0]}
{%render_列[1]}
然后,您可以执行所需的任何逻辑,以更改要在render_列包含标记及其使用的模板中显示的内容。我希望我能说得更多,但这非常具体,列内容取决于什么以及在每种情况下有多不同。我同意Daniel的观点,包含标签可能是您想要的,我认为您误解了它们,
{%extends%}
如果内容是静态的或在上下文中,则可以使用{%include%}块,如
{% block content %}
{% include "columnlayout2.html" %}
{% include "columnlayout3.html" %}
{% endblock %}
因此,您可以将所需的内容存储在{{two_columns}}和{{two_columns}}中,并进行渲染
------------------------------------------------------------
columnlayout2.html
------------------------------------------------------------
<div class="twocol container2">
<div class="container1">
<div class="col1">
{{ two_columns[0] }}
</div>
<div class="col2">
{{ two_columns[1] }}
</div>
</div>
</div>
模板标签
@register.inclusion_tag("columns/two_columns.html")
def show_two_columns(columns):
return {'columns': columns}
two_columns.html
<div class="twocol container2">
<div class="container1">
<div class="col1">
{% render_column columns[0] %}
</div>
<div class="col2">
{% render_column columns[1] %}
</div>
</div>
</div>
{%render_列[0]}
{%render_列[1]}
然后你可以做任何你需要改变的逻辑