详解Python的Django框架中的模版继承

下面我将详细讲解 Python 的 Django 框架中的模版继承。

什么是 Django 模版继承?

在 Django 中,模版继承是一种重用模版代码的方法。它允许我们在不重复编写相同代码的情况下定义基本模板(通常是布局),并在子模板中继承这些基本模板。这使得模板更具可重用性和可维护性。

Django 模版继承的基本结构

一般来说,Django 模版继承具有以下基本结构:

{% extends “base.html” %}

{% block content %}

{% endblock %}

其中,{% extends %} 标签指定从哪个模板进行继承,并且被继承的模板是占位符的。在子模板中,{% block %} 标签用于定义占位符并允许子模板修改父模板并插入子模板特定的内容。

示例1

现在我们来看一个具体的示例。假设我们有一个基本模板 base.html,我们想要在该模板的内容区域插入子模板 child.html 的内容。我们可以这样做:

base.html:

<html>
<head>
    <title>{% block title %} {% endblock %}</title>
</head>
<body>
    {% block content %}
    {% endblock %}
</body>
</html>

child.html:

{% extends "base.html" %}

{% block title %}
    My Child Page
{% endblock %}

{% block content %}
    <h1>Welcome to My Child Page</h1>
{% endblock %}

在子模板中,我们使用 {% extends "base.html" %} 指定从 base.html 模板中继承。{% block title %} 定义了一个占位符,我们在子模板中可以重载它。同样,{% block content %} 也定义了一个占位符,我们使用这个占位符在子模板中插入特定的内容。最终,子模板中的内容将插入基本模板中的占位符对应位置,形成最终的输出页面。

示例2

现在,我们再来看一个稍微复杂一些的例子。假设我们有一个 Blog 网站,其中包含多个页面,并且我们希望所有页面都具有类似的外观和布局。我们可以使用 Django 的模版继承策略来实现这一目标。

base.html:

<html>
<head>
    <title>{% block title %}My Blog{% endblock %}</title>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>{{ blog_name }}</h1>
            <ul class="page-links">
                <li><a href="/">首页</a></li>
                <li><a href="/archive/">归档</a></li>
                <li><a href="/about/">关于</a></li>
            </ul>
        </div>
        {% block content %}
        {% endblock %}
    </div>
</body>
</html>

archive.html:

{% extends "base.html" %}

{% block title %}
    {{ blog_name }} - 归档
{% endblock %}

{% block content %}
    <ul class="post-list">
        {% for post in posts %}
            <li><a href="/post/{{ post.id }}">{{ post.title }}</a></li>
        {% endfor %}
    </ul>
{% endblock %}

about.html:

{% extends "base.html" %}

{% block title %}
    {{ blog_name }} - 关于
{% endblock %}

{% block content %}
    <p>这个站点专注于分享关于 Django 和 Python 的教程和资源。</p>
{% endblock %}

在这个例子中,我们定义了一个基本模板 base.html,用于呈现网站的头部和底部。各个页面可以直接继承基本模板,并可以使用 content 块插入具体的内容。其中,ul page-links 是我们在 base.html 中定义的导航栏,子模板可以对其进行修改。例如,在 about.html 中,我们只在 content 块中添加了一条关于站点的简短介绍,而修改了 title 块。

这个例子中,我们还使用了 Django 模板引擎的另外一个特性,变量渲染。在基本模板中,我们使用了变量 {{ blog_name }} 来动态渲染网站名称,并在子模板中使用了变量 {{ posts }},遍历所有 posts 并呈现一个带有超链接的文章列表。

总之,Django 模版继承是一种非常有用的技术,在减少代码重复和提高代码可维护性方面具有巨大优势。希望这篇文章能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python的Django框架中的模版继承 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django, django_restful 关于Authentication的学习总结

    一、关于配置 django: 配置为AUTHENTICATION_BACKENDS,setting.py不写的话,AUTHENTICATION_BACKENDS默认设置为(‘django.contrib.auth.backends.ModelBackend’,),           这是检测Django用户数据库的基本认证方案。按照 AUTHENTICAT…

    Django 2023年4月13日
    00
  • django 从零开始 11 根据时间戳加密数据

      django自带一个加密的方法signer,对数据进行一个加密 一般这种方式用于账号密码邮箱找回,或者token设置       class TimestampSigner(Signer): def timestamp(self): return baseconv.base62.encode(int(time.time())) def sign(self…

    Django 2023年4月11日
    00
  • 在Django中使用logging模块

    一、Django logging配置 1、在setting.py中配置 # 日志文件存放路径 BASE_LOG_DIR = os.path.join(BASE_DIR, “log”) # Logging配置 LOGGING = { ‘version’: 1, # 保留字 ‘disable_existing_loggers’: False, # 是否禁用Dja…

    Django 2023年4月16日
    00
  • 深入浅析Django MTV模式

    关于深入浅析Django MTV模式的完整攻略,我将详细阐述如下。 MTV模式概述 Django框架采用的是MTV模式,也就是Model-Template-View(模型-模板-视图)模式,是一种用于构建Web应用程序的软件设计模式。在这种模式中,Model负责数据存储和处理,Template负责用户交互页面设计,View负责进行逻辑处理和数据渲染。 MTV…

    Django 2023年5月16日
    00
  • django基于mysql实现图片上传与打开

    1:在models.py文件中建立数据表  from django.db import models  class User(models.Model): img = models.ImageField(upload_to=’img’,null=True)   因为我是后来添加的图片字段,所以需要在里面加个null=True,至于Upload_to是文件板寸…

    Django 2023年4月13日
    00
  • Django-ORM之ManyToManyField的使用-多对多关系

    表结构设计 多对多关系表创建外键,典型例子:书–作者–出版社,书与作者的关系就可以看作是多对多关系。 # 表结构设计 class Book(models.Model): title = models.CharField(max_length=32) pub = models.ForeignKey(‘Publisher’, on_delete=models…

    2023年4月10日
    00
  • django+uwsgi+docker+k8s+jenkins

        其实这个搞这个就因为一点小事,django的日志无法按日期切分 原来方式都是直接用manage.py runserver的,听取了同事的建议开始准备使用uwsgi来搞   1.安装uwsgi   pip install uwsgi     2.django新增一个uwsgi的配置文件 [uwsgi] http = :端口 socket = /tmp/…

    Django 2023年4月13日
    00
  • Django Rest Framework实现身份认证源码详解

    我来详细讲解一下“Django Rest Framework实现身份认证源码详解”的完整攻略,下面我们将分为以下几个部分: 介绍Django Rest Framework身份认证的基本原理 详细讲解Django Rest Framework中使用基于Token的身份认证 详细讲解Django Rest Framework中使用基于Session的身份认证 1…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部