Django入门:第八章、模板引擎设置

简介: Django入门:第八章、模板引擎设置

第八章目录

 第八章、模板引擎设置

回顾

要显示文章标题,就要把标题从数据库中先读取出来。我们在创建BlogArticles模型时,有一个专门的title字段存储文章标题,那么怎么读取到它呢?通过前面学习笔记,

  1. 一种是通过SQL语句进行查询 – select语句
  2. 另一种就是通过Django自带的API进行读取,这个功能强大的API还可以创建、获取、修改和删除对象

显示文章标题

manage.py所在的目录创建一个名为 templates的新文件夹:

myblog/
 |    |-- blog
 |    |-- myblog/
 |    |-- templates/   <-- 这里
 |    +-- venv/
 |    +-- db.sqlite3
 |    +-- manage.py

建立的目录如下图:

image.png

创建home.html文件

然后在templates文件夹中,创建一个名为home.html的HTML文件:

templates/home.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>我的博客</title>
    </head>
    <body>
    <h1>我的博客</h1>
    {% for blog in blogs %}
        <li>{{ blog.title }} </li> <br>
    {% endfor %}
    </body>
</html>

home中,我们使用了原始HTML和一些特殊标签 {% for ... in ... %}{{ variable }} 。它们是Django模板语言的一部分。

Django模板语言都需要用到{}花括号,块标签{%block name %},用来包裹块内容,表示其间的内容可以自定义,name是块的名称。块结束标签{% endf-block%}

上面的例子展示了如何使用 for遍历列表对象,这一点类似Python的循环语句,{% for blog in blogs %}是循环的开始,{% endfor %}是本循环结束。

{{ blog.title }}双层花括号的方式表示此处显示变量引用的数据。blog是从blogs的QuerySet序列中得到的一个实例对象,blog.title是某个实例的title字段,我们通过这种方式获得一片博客的标题,最后生成动态HTML文档。

在使用这个HTML页面之前,我们必须告诉Django在哪里可以找到我们应用程序的模板(注:如果是利用Pycharm创建的Django项目,则会自动生成templates)。

打开myproject目录下面的settings.py文件,搜索TEMPLATES变量,并设置DIRS 的值为 os.path.join(BASE_DIR, 'templates')

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

创建home视图:

在我们完成对home模板创建完成后,接下来开始写home()函数:

blog/views.py

from django.shortcuts import render
from .models import BlogArticles
# Create your views here.
def home(request):
    blogs = BlogArticles.objects.all()
    return render(request, "home.html", {"blogs":blogs})

还记得当初第三章中写HelloWorld页面时编写的welcome()函数吗?同样,home()是在视图文件views.py中编写的一个函数,这种方式被称为“基于函数的视图”,这个函数就叫“视图函数”,后面还将学到“基于类的视图”。

为了响应用户请求,然后我们利用前面交互模式中使用的语句blogs = BlogArticles.objects.all(),得到所有的BlogArticles类实例。

然后再以return结束当前函数,并返回结果。

render()的作用是将数据渲染到指定模板,第一个参数必须是request,然后是模板位置和所传送的数据,数据是用类字典的形式传送给模板的。

home.html就是展示标题列表的前端页面–被称为“模板”。在每一个应用中都可以有一个专门的模板目录,这个目录的名称必须是templates。

{"blogs":blogs}向模板文件home.html中传入blogs变量所引用的QuerySet对象,其包含所有BlogArticles类的实例对象,即从数据库中读取所有记录,并在模板文件中以变量blogs({"blogs":blogs})中的键blogs来代表。

更新urls:

函数和模板都写好了之后,我们还需要做一项工作,就是进行URL配置,相信大家在学完第三章后应该知道在哪个文件中进行URL配置了吧,对就是myblog/urls.py文件中。增加如下新增代码:

myblog/urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url  # 新增
from blog import views  # 新增
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$', views.home, name='home'),  # 新增
]

Final成果

最后在浏览器中打开 http://127.0.0.1:8000/,结果如下图,能一个简单的HTML页面展示:

image.png

可以看到,自己创建的博客文章标题已经显示在浏览器中,相信到这一步你已经激动不已(笔者也是)。细心的读者可以会问了,只是展示了标题,可是并不能通过点击博客文章标题查看博客内容,对,下一章的任务就是带领大家完成查看博客文章。


相关文章
|
10天前
|
Java API 数据库
Django:从入门到精通
【11月更文挑战第18天】Django是一个由Python编写的高级Web应用框架,以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发,旨在简化Web应用的开发过程。作为一个开放源代码项目,Django迅速吸引了大量的开发者和用户,成为了Python Web开发领域的重要工具之一。
23 1
|
1月前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)
|
1月前
|
存储 数据库 Python
Python编程--Django入门:用户账户(一)
Python编程--Django入门:用户账户(一)
|
3月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
206 0
|
3月前
|
开发框架 安全 数据库
解锁Django框架神秘面纱!从入门到实战,掌握这些技巧,让你的Web应用秒变高效神器!
【8月更文挑战第31天】Django 是 Python 的明星 Web 开发框架,以其高效、安全及可扩展性著称,适用于构建各类 Web 应用。本文从 Django 基础概念出发,介绍其 MTV 架构,涵盖模型(Model)、模板(Template)、视图(View)等核心组件,并通过示例代码展示实际应用。此外,还将探讨路由配置、管理界面及实战技巧,帮助读者全面掌握 Django,为高效 Web 开发打下坚实基础。
54 0
|
3月前
|
关系型数据库 MySQL 机器人
Django入门到放弃之数据库配置
Django入门到放弃之数据库配置
|
3月前
|
缓存 中间件 数据库
Django入门到放弃之缓存及信号机制
Django入门到放弃之缓存及信号机制
|
3月前
|
前端开发 数据库 数据安全/隐私保护
Django入门到放弃之Auth模块
Django入门到放弃之Auth模块
|
3月前
|
JSON 前端开发 数据安全/隐私保护
Django入门到放弃之CSRF_TOKEN
Django入门到放弃之CSRF_TOKEN
|
3月前
|
前端开发 中间件 索引
Django入门到放弃之中间件
Django入门到放弃之中间件