Django入门教程

前言

第一章: django快速入门

第二章: django MTV架构

第三章: django视图

第四章: django模板

第五章: django模型

第六章: django后台管理系统

第七章: 项目实战-简易的博客系统

第八章:django表单

第九章:django用户认证系统

第十章:django中的会话

第十一章:django安全

第十二章:django性能优化

第十三章:django实用工具

首页 > Django入门教程 > 第四章: django模板 > 4.2节: 在视图中渲染模板

4.2节: 在视图中渲染模板

薯条老师 2020-07-20 17:10:28 234981 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

4.2.1 在视图中进行模板渲染

HTML只是用来定义页面的结构,在django服务器中进行页面渲染,主要是指调用模型层的数据来生成不同内容的页面。 在第5章的内容中,会对模型进行详细介绍。在视图中进行模板渲染之前,需要先配置好模板目录,以存放模板文件,模板文件中使用到的静态文件(图片等),可以存放到指定的静态目录中。django提供了便捷的render函数,可以方便地在视图中进行模板渲染。

 4.2.2 配置模板目录

与项目有关的配置,都是在项目中的settings.py中进行定义的,例如模板目录的配置,静态目录的配置。在1.5节中,对模板目录的配置和django应用的注册进行了讲解,现在我们重新回顾下与模板目录配置有关的操作:

(1) 打开chips目录中的settings.py

找到与模板配置相关的两个全局变量,分别是:BASE_DIR,TEMPLATESBASE_DIR表示服务器的根目录, TEMPLATES变量用来配置Django模板的meta信息,例如模板引擎,模板文件的存放路径等。

 

(2) 创建templates目录,存放模板文件

在Django-project中创建templates目录,并在settings.py中进行模板路径的配置。

打开settings.py,修改全局变量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',
            ],
        },
    },
]

在以上代码中对DIRS属性进行了修改,将根目录下的templates目录配置为模板文件的存放目录。由于BASE_DIR指的是Django服务器的根目录路径,故通过代码 os.path.join(BASE_DIR,"templates"),可以获取templates目录的绝对路径。

 4.2.3 配置静态目录

静态目录的配置同样是在settings.py中进行定义的。现在读者按照以下步骤来进行操作:

 (1) 打开chipscoco目录中的settings.py

找到与模板配置相关的两个全局变量:BASE_DIR,STATICFILES_DIRS。如果脚本中找不到STATICFILES_DIRS,可以自行定义同名的全局变量,以进行静态目录的配置。BASE_DIR表示服务器的根目录,STATICFILES_DIRS是一个元组类型,可以用来定义静态文件的查找目录。静态目录配置实例:

STATICFILES_DIRS = (
       os.path.join(BASE_DIR, 'static/'),
)

在上文的代码中,将根目录下的static目录配置为静态文件的查找目录。读者可以根据实际开发情况,配置一个或多个静态文件目录。

 (2) 在模板文件中引用静态文件

在模板文件中引用静态文件前,需要先加载静态资源。在模板文件加载静态资源的代码:

{% load static %}

该行代码必须放在静态文件引用的代码前面,否则Django会抛出模板语法错误的异常信息。

在settings.py中{%%}符号是Django模板语言提供的特殊符号,以定义相关的代码逻辑, 在模板中使用{{}}符号可以引用在视图层中传递过来的变量,对于Django模板语言,会在4.3节中进行详细介绍。

在模板文件中引用静态文件,可以使用django模板语言中的static函数。语法形式为:

{%static 'path_of_static_file'%}

path_of_static_file表示静态文件相对于静态目录的路径。静态文件引用举例:

<img src="{%static 'images/logo.png'%}" />

假设在settings.py中配置的静态目录为static,则<img src="{%static 'images/logo.jpg'%}" /> 被渲染后的html代码为:

<img src="/static/images/logo.png" />

 /static/images/logo.jpg是相对于服务器根目录的路径,其完整的http url为:

http://127.0.0.1:8080/static/images/logo.png

以上的http url是假设django服务器运行在本地,且http端口为8080。

 4.2.4 render函数

django中提供了内置函数render, 可以在视图中进行模板渲染。使用render函数,需要从django.shortcuts 中进行导出。render函数的参数及用法:

参数名

描述

request

HttpRequest对象,用来生成对客户端的响应

template_name

字符串类型,表示模板文件的名称

context

字典类型的对象,用来对模板进行数据渲染,默认为空

content_type

字符串类型,表示MIME对象,默认为'text/html'

status

整型,表示响应的http状态码,默认为200

using

使用的模板引擎名称,默认为Django内置的模板引擎

render函数中,需重点关注的是context对象,通过context对象可以传递数据给模板,以生成不同内容的页面。context是一个字典类型,context中的键名可以在模板中作为变量进行直接引用。

context参数举例:

{'title':"Django的美妙爵士乐"}

则在模板中,可以通过{{title}}来进行引用,输出的值为"Django的美妙爵士乐"。render函数的返回值是一个HttpResponse对象,所以可以直接在函数视图或类视图中进行使用。

在视图中,必须返回一个HttpResponse对象或HttpResponse的子类对象。

4.2.5 在视图中渲染模板

在以上的内容中,我们在项目中配置了模板目录,静态目录,以及学习了render函数的用法。现在请读者按照以下步骤来进行操作,根据不同的查询请求,来响应不同的博客页面:

 (1) 打开blog目录下的urls.py, 定义url与blog视图的路由

urls.py更新后的代码:


from django.contrib import admin
 
# 在url中使用正则表达式,需要使用re_path函数
from django.urls import path,re_path

import blog.views as blog
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.Home.as_view()),
    path('arithmetic/', blog.arithmetic),
    path('html/', blog.Html.as_view()),
        
    # 新增的代码,在url中使用正则表达式
    re_path('blog/(\d+).html', blog.blog),
]

在urls.py的代码中,re_path函数中的正则表达式(\d+),将作为参数传递至视图中。

 (2) 打开chipscoco目录下的views.py, 定义blog视图

blog视图代码:

def blog(request, page_id):
    if request.method == "GET":
        # 将页面的id号传递至模板中,page_id参数对应于正则表达式中的\d+
        return render(request, "blog/blog.html",{"page_id": page_id})

(2) 在templates目录中创建blog.html

templates目录位于根目录下,blog.html中的代码为:

{% load static %}
<html>
<head>
<title>Django的美妙爵士乐</title>
</head>
<body>
<h1>这是博客的{{page_id}}.html页面</h1>
<img src="{%static 'images/Django.jpg'%}">
</body>
</html>

在模板中使用{{page_id}}, 来引用从视图中传递的page_id变量, django根据不同的page_id值,来生成不同内容的页面。模板中使用到的django.jpg:

 image.png

 (3) 配置模板目录以及静态目录

模板目录为根目录下的templates目录,静态目录为根目录下的static目录。static目录的目录结构:

└── static

    ├──images

    │   ├── django.jpg

(4)在浏览器中进行测试

使用浏览器进行测试时,需要先启动Django服务器:python manage.py runserver 8080

打开浏览器,在地址栏中输入http://127.0.0.1:8080/blog/1314.html:

 image.png

 

在地址栏中输入http://127.0.0.1:8080/blog/7878.html:

 image.png

在进行测试时,在html页面名中必须输入合法的数字前缀,否则Django会抛出页面不存在的错误异常。


 image.png

同学们可以改下urls.py中的正则表达式,以支持任意字符形式的名称前缀。

4.2.6 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


欢迎 发表评论: