【问题标题】:How do I write a template that will be used on every page and then include sub-templates?如何编写将在每个页面上使用的模板,然后包含子模板?
【发布时间】:2012-04-14 22:20:49
【问题描述】:

我遵循了 Django“第一个应用程序”教程,现在我想知道如何编写整个站点都将使用的模板。我可以为每个视图编写模板,但我如何编写一个将出现在每个页面上的模板,然后在“内容块”中包含“子模板”?

【问题讨论】:

    标签: python django templates themes


    【解决方案1】:

    请参阅 Django 模板文档的 Template Inheritance 部分。

    基本上,您创建一个作为“基础”的模板:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <link rel="stylesheet" href="style.css" />
        <title>{% block title %}My amazing site{% endblock %}</title>
    </head>
    
    <body>
        <div id="sidebar">
            {% block sidebar %}
            <ul>
                <li><a href="/">Home</a></li>
                <li><a href="/blog/">Blog</a></li>
            </ul>
            {% endblock %}
        </div>
    
        <div id="content">
            {% block content %}{% endblock %}
        </div>
    </body>
    </html>
    

    并将其保存为(例如)“base.html”在您的模板目录中,然后每个特定的页面模板如下所示:

    {% extends "base.html" %}
    
    {% block title %}My amazing blog{% endblock %}
    
    {% block content %}
    {% for entry in blog_entries %}
        <h2>{{ entry.title }}</h2>
        <p>{{ entry.body }}</p>
    {% endfor %}
    {% endblock %}
    

    【讨论】:

    • 考虑到我使用的是正确的加载器,在每个应用程序的模板文件夹中包含我的模板是否安全?还是只使用绝对路径更好?
    • @Addiction2Code 我不确定我是否理解您的问题。你可以把“base.html”放在任何你想要的地方,只要settings.py中的TEMPLATE_LOADERSTEMPLATE_DIRS允许你找到它,然后如果你有多个应用程序,特定的页面模板应该在应用程序特定的文件夹中。
    • 另外,看看 {{ block.super }} 这在使用模板继承时非常有用;)
    【解决方案2】:

    长话短说,您应该编写一个基本模板,然后扩展此模板。这称为模板继承,很好解释here

    【讨论】:

    • SO 答案应该很有用,而无需尽可能点击链接,即使您基本上只是像我一样从链接中引用。
    • 我对我的答案的“有效性”有些怀疑,但后来我认为没关系,因为我们实际上是同时回答的,答案几乎相同;那么你可能编辑了它。下次我会去评论,如果它只是一个链接,谢谢你的建议。
    • 是的,我经常发布“只是链接”,然后在接下来的几分钟内添加上下文。这样一来,当我试图充实细节时,其他五个人发布完全相同的内容的可能性就较小。
    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2013-09-20
    • 2012-11-03
    • 2012-11-04
    相关资源
    最近更新 更多