Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在扩展另一个文件的django模板中使用带有动态内容的html块片段?_Django_Templates_Django Templates_Template Engine - Fatal编程技术网

如何在扩展另一个文件的django模板中使用带有动态内容的html块片段?

如何在扩展另一个文件的django模板中使用带有动态内容的html块片段?,django,templates,django-templates,template-engine,Django,Templates,Django Templates,Template Engine,有人能帮我找到一种在Django模板中实现以下内容(见下面的代码片段)的方法吗?我知道您不能使用多个扩展,但我是django新手,我不知道这样的东西的正确语法。我希望能够做到这一点,这样我就可以出于css的原因使用嵌套的div布局,而不必每次都这样键入,也不必冒打字错误的风险。换句话说,我希望能够让页面模板扩展我的base.html文件,然后使用动态模板内容的html片段(即循环模板或其他模板逻辑设备,而不仅仅是我从视图控制器设置的上下文变量) 编辑: 我希望能够在每个列中以任意方式显示任意内

有人能帮我找到一种在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]}
然后你可以做任何你需要改变的逻辑