Django入门:第十一章、基础模板

简介: Django入门:第十一章、基础模板

回顾

在上一章中,我们成功的将静态文件设置好。已经将bootstrap-4.3.1下的css和js文件导入,也已经简单的使用bootstrap.min.css将我们得博客变得好看一点,不过细心的读者发现,我们使用的home.html和content.html文件中包含重复的HTML代码,有没有好的方式改变一下这种情况?

基础模板

为了展示主页和详细的博客文章信息,我们会复制和粘贴HTML文档的多个部分(比如头部信息),其实,Django为我们提供了很好的模板继承功能,只要我们写好基础模板,然后将静态文件放在基础模板中使用,其他模板添加你自己需要定制的部分。就能大量减少我们的代码量,怎么样,是不是很激动?那我们来看一下,怎么做:

首先在./templates文件夹中创建一个名为base.html的文件:

{% load static %}<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}Django 博客{% endblock %}</title>
        <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    </head>
    <body>
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container">
            <a class="navbar-expand" href="{% url 'home' %}">Django 博客</a>
        </div>
    </nav>
        <div class="container">
            <ol class="breadcrumb my-4">
                {% block breadcrumb %}
                {% endblock %}
            </ol>
            {% block content %}
            {% endblock %}
        </div>
    </body>
</html>

这是我们的母模板,之后我们创建的模板都 继承自这个特殊的模板。现在我们介绍 {% block %}标签。它用于在模板中保留一个空间,一个“子”模板(继承这个母模板)可以在这个部分中插入代码和HTML。

Django提供了强大的模板语言用于控制数据渲染,由模板标签(template tags)模板变量(templates variables)、**模板过滤器(templates filters)**组成:

  • templates tags:进行渲染控制,类似{% tag %}
  • templates variables:可认为是模板标签的一种特殊形式,即只是一个变量,渲染的时候只替换内容,类似{{ variable }}
  • templates filters:附加在模板变量上改变变量最终显示结果,类似{{ variable|filter }}

{% block title %}Django 博客{% endblock %}中,设置了一个默认值“Django博客”,如果子模板没有设置{%block title%}的值,它就会被使用。

接下来,我们改写我们之前写过的两个模板:home.html 和 content.html

./templates/home.html

{% extends 'base.html' %}
{% block breadcrumb %}
    <li class="breadcrumb-item active" >
        <a href="">欢迎来到宇宙之一粟的技术漂泊之旅</a>
    </li>
{% endblock %}
{% block content %}
    <table class="table">
        <thead class="thead-dark">
            <tr>
                <th>标题</th>
                <th>作者</th>
                <th>发布时间</th>
            </tr>
        </thead>
        <tbody>
            {% for blog in blogs %}
                <tr>
                    <td>
                        <a href="{{ blog.id }}">{{ blog.title }} </a>
                    </td>
                    <td>
                        {{ blog.author }}
                    </td>
                    <td>
                        {{ blog.publish }}
                    </td>
                </tr>
            {% endfor %}
        </tbody>
    </table>
{% endblock %}

home.html的第一行是 {%extend ‘base.html’%}。这个标签用来告诉Django使用base.html作为母模板,使用block来放置这个页面独有的部分。

./templates/content.html

{% extends 'base.html' %}
{% block title %}
    {{ article.title }} - {{ article.author.username }}
{% endblock %}
{% block breadcrumb %}
    <li class="breadcrumb-item"><a href="{% url 'home' %}">Home</a></li>
    <li class="breadcrumb-item active">{{ article.author.username }}</li>
{% endblock %}
{% block content %}
    <div class="blog-post" >
        <h2 class="blog-post-title">{{ article.title }}</h2>
        <p class="blog-post-meta">
           Published {{ article.publish }} by
            <a href="#"> {{ article.author.username }}</a>
        </p>
    <p>
        {{ article.body|truncatewords:30|linebreaks }}
    </p>
    </div>
{% endblock %}

在content.html中,我们改变了{%block title%}的默认值,然后运行整个Django,访问到主页,如下图:

image.png

随便选择并点击进入一篇博客,查看博客详细信息,如下图:

image.png

总结

我们能看到两个界面都有了导航页,说明母模板里面的内容被 home.html 和 content.html 继承下来,并各自能展示自己想要显示的内容。

其实,如果你还想分的更细的话,一般网站可以分为上、中、下三个部分。上部就是网站的头部,可以放导航栏,网站图标或商标,所以可以自己设置头部基础模板   header.html;中部就是你要向访问者展示的内容,比如博客、列表、图片,这个就是子模板该做的内容;下部就是网站底部,可以显示网站的版权信息或者友情链接等一般不怎么改变的内容,所以自己可以定义一个footer.html。

其实,关于模板,作者的审美也不是很好,所以网页布局也不太好看,

相关文章
|
3月前
|
Java API 数据库
Django:从入门到精通
【11月更文挑战第18天】Django是一个由Python编写的高级Web应用框架,以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发,旨在简化Web应用的开发过程。作为一个开放源代码项目,Django迅速吸引了大量的开发者和用户,成为了Python Web开发领域的重要工具之一。
102 1
|
4月前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)
78 2
|
4月前
|
存储 数据库 Python
Python编程--Django入门:用户账户(一)
Python编程--Django入门:用户账户(一)
61 1
|
6月前
|
前端开发 关系型数据库 Python
Django入门到放弃之分页器
Django入门到放弃之分页器
|
5月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
6月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
207 0
|
6月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
442 0
|
6月前
|
开发框架 安全 数据库
解锁Django框架神秘面纱!从入门到实战,掌握这些技巧,让你的Web应用秒变高效神器!
【8月更文挑战第31天】Django 是 Python 的明星 Web 开发框架,以其高效、安全及可扩展性著称,适用于构建各类 Web 应用。本文从 Django 基础概念出发,介绍其 MTV 架构,涵盖模型(Model)、模板(Template)、视图(View)等核心组件,并通过示例代码展示实际应用。此外,还将探讨路由配置、管理界面及实战技巧,帮助读者全面掌握 Django,为高效 Web 开发打下坚实基础。
78 0
|
6月前
|
前端开发 数据处理 开发者
解锁Django模板系统终极奥义!揭秘高效前端渲染秘籍,让你的网站秒变炫酷黑科技!
【8月更文挑战第31天】Django作为Python的高级Web框架,内置的模板系统支持动态HTML渲染。本文通过在线书店案例,详细介绍Django模板系统的设置与高效渲染技巧,包括创建模板文件、编写视图函数及URL配置。通过合理使用过滤器、深度查询和模板继承等技巧,提升前端渲染效率和安全性,优化Web应用开发流程。
51 0
|
6月前
|
关系型数据库 MySQL 机器人
Django入门到放弃之数据库配置
Django入门到放弃之数据库配置