Django(2)模板、标签(一)

简介: Django(2)模板、标签(一)
>>> django.VERSION  
(4, 1, 0, 'final', 0)

PS:基于前几章的进度进行修改


一、使用Django模板修改页面


  • 上一章中,直接使用了index_test.py添加\修改了资源页面,这次使用模板来添加资源页面\修改页面
  • 先来看index_test.py文件,可以看到使用了模块django.http.HttpResponse()来输出指定的信息:
#-*- coding: utf-8 -*-
from django.http import HttpResponse
def hello(request):
    return HttpResponse("Hello World!!!")
  • 而上面的这种方式会将数据和视图混合在一起,不符合Django中的MTC思想,所以我们可以使用模板来输出数据:
  • 根据上一章节中的项目结构,现在在helloworld项目目录下创建templates目录,然后创建test.html文件
  • 现在的目录结构如下:

339b429f6ceb4968a082a93c3db5a455.png


  • 下面是test.html模板文件的内容:
<h1>{{ hello }}</h1>  #这里是变量,使用了双括号
  • 下面向Django说明模板文件路径,修改helloworld容器目录下的settings.py文件:


import os         #导入os模块
。。。。。。
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],             #修改DIRS,说明模板文件的路径,BASE_DIR是manage.py文件所在的路径
        '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',
            ],
        },
    },
]
  • 现在修改index_test.pyurls.py,增加一个新的对象,用于向模板提交数据


render()方法参数:

render(request, template_name, context=None, content_type=None, status=None, using=None)

request:必要参数,浏览器向服务器发送的请求对象,包含用户信息、请求内容、请求方式等

template_name:必要参数,设置模板文件名,用于生成网页内容

context:对模板上下文即模板变量赋值,以字典格式表示,默认情况下是一个空字典

content_type:响应内容的数据格式,一般情况下使用默认值即可

status:HTTP状态码,默认是200

using:设置模板引擎,用于解析模板文件、生成网页内容等

- index_test.py
#-*- coding: utf-8 -*-
from django.shortcuts import render
def hello(request):
    contest = {}
    contest['hello'] = 'Hello World!!!'
    return render(request,'test.html',contest)   #指定模板文件
- urls.py
#-*- coding: utf-8 -*-
from django.urls import path
from . import index_test
urlpatterns = [
    path('hello/',index_test.hello),
]
  • 可以看到,我们这里使用了render来代替之前使用的HttpResponserender使用了一个字典contest作为参数,contest字典中元素的键值hello对应了test.html模板文件中{{ hello }}变量


  • 再次进行访问:


de55da5828d54f1dbcaed82fab1ee69e.png


  • 可以看到已经替换页面了,现在已经完成了使用模板来输出数据,实现数据与视图分离


二、Django模板标签


  • 经过上面的实践,下面来看一下Django模板中常用的语法规则


- 变量


  • 模板语法:
视图view:{"HTML变量名":"views变量名"}
HTML:{{ 变量名 }}


  • 可以看到其实也就是字典,跟上面那个一样
  • 下面来看案例:


  • 现在修改视图文件index_test.py文件,下面是变量和字典的写法,可以看到思路其实是一样的:


- 变量
# -*- coding: utf-8 -*-
from django.shortcuts import render
def Hello(request):
    test_view = "测试"
    hello_view = "你好"
    return render(request,'test.html',{"test":test_view,"hello":hello_view})

修改templates目录下的test.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>   #页面名称
</head>
<body>
    <p>{{ test }}</p>      #导入两个变量
    <h1>{{ hello }}</h1>
</body>
</html>

再次访问,成功修改!

9622237cc261497cac4fc6bdf89d076c.png

- 列表


  • templates中的test.html文件,可以使用.索引下标取出相对应的元素
  • 下面来看案例:


  • 修改视图文件index_test.py,相当于是把字典的值换成列表:
# -*- coding: utf-8 -*-
from django.shortcuts import render
def Hello(request):
    test_view = ["测试1号","测试2号","测试3号"]
    return render(request,'test.html',{"test":test_view})

修改test.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    <p>{{ test }}</p>
    <p>{{ test.0 }}</p>           #配合 . 可以根据列表下标调用元素
    <p>{{ test.2 }}</p>
</body>
</html>

查看页面:

254f5adb288d4eba8e20e0ba46c951bd.png


- 字典


  • templates中的test.html文件,可以使用.键取出相对应的元素
  • 下面来看案例:


  • 修改视图文件index_test.py
# -*- coding: utf-8 -*-
from django.shortcuts import render
def Hello(request):
    test_view = {"name":"测试","age":22}
    return render(request,'test.html',{"test":test_view})
  • 修改test.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    <p>{{ test }}</p>
    <h1>{{ test.name }}</h1>
    <h2>{{ test.age }}</h2>
</body>
</html>
  • 查看页面:


88c53cea5ef64b0aae37fd70c5207e89.png

目录
相关文章
|
6月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
65 0
|
2月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
3月前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
3月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
30 1
|
3月前
|
前端开发 Python
Django模板
【8月更文挑战第19天】
30 3
|
3月前
|
自然语言处理 前端开发 数据处理
Django的模板系统
【8月更文挑战第13天】
30 2
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
119 0
|
3月前
|
前端开发 数据处理 开发者
解锁Django模板系统终极奥义!揭秘高效前端渲染秘籍,让你的网站秒变炫酷黑科技!
【8月更文挑战第31天】Django作为Python的高级Web框架,内置的模板系统支持动态HTML渲染。本文通过在线书店案例,详细介绍Django模板系统的设置与高效渲染技巧,包括创建模板文件、编写视图函数及URL配置。通过合理使用过滤器、深度查询和模板继承等技巧,提升前端渲染效率和安全性,优化Web应用开发流程。
24 0
|
3月前
|
安全 JavaScript 前端开发
Django入门到放弃之模板及标签
Django入门到放弃之模板及标签
|
5月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之基于django应用模板创建的FC,如何配置数据库
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。