四、template模板
模板
之前的案例中,能够返回简单的字符串信息给浏览器。那如果想要返回html
页面给浏览器该怎么做呢?
当然,我们可以这么写:
def index(request):return HttpResponse('<h1 style="color:red">我是硬编码的</h1>')
这样显然,不便维护,也不高效。
django提供了一套模板渲染的机制,将html源码写在模板文件中,然后通过方法将数据渲染后返回给客户端。
模板路径设置
在项目根目录下创建一个templates
文件夹用来存放模板文件,然后将这个文件的路径配置到配置项TEMPLATES
的DIRS
中。
# study_django/settings.py
...
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [str(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',],},},
]
注意要填写模板文件夹的绝对路径,通过代码str(BASE_DIR / 'templates')
可以动态生成。
其实我们还有一个操作没有做,我们需要用pycharm将templates这个文件夹设置为当前项目的模板文件。设置成功之后,我们在输入html路径的时候就会有提示。
模板渲染
模板渲染本质上就是将数据替换到模板文件的插槽中,和字符串替换一样。
模板变量
最简单的渲染是将变量替换到模板中。
在模板中,模板变量的语法是:
{{ 变量名 }}
在templates
文件中再创建一个crm
文件夹,然后在其中创建一个index.html
,内容如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><p>{{ msg }}</p>
</body>
</html>
添加了一个模板变量msg
,这个变量需要从视图传递一个对应的变量进行替换。修改crm.index
视图如下:
# crm/views.pyfrom django.http import HttpResponse
from django.template.loader import get_templatedef index(request):msg = '我是首页面't = get_template('crm/index.html') # 获取模板html = t.render(context={'msg': msg}) # 渲染htmlreturn HttpResponse(html) # 返回响应
上面的代码非常简单,做了如下工作:
- 在视图中定义了一个变量
msg
, - 然后根据路径
crm/index.html
获取对应的模板, - 再将变量
msg
传递给模板进行渲染, - 最后将渲染好的html返回。
访问这个视图,返回页面如下:
上面的代码还可以通过一个快捷函数简化:
from django.shortcuts import renderdef index(request):msg = '我是首页面'return render(request, 'crm/index.html', context={'msg': msg})
render
函数的第一个参数是请求request
,第二个参数是模板路径,第三个参数context
是要传递给模板的数据,是一个字典,其中key是模板上对应的变量名,值是实际要渲染的数据。
模板变量的解析规则
模板变量按照如下流程解析替换:
- 当模板引擎遇到模板变量时,它会计算该变量,并将其替换为结果
- 当模板引擎在变量中遇到
.
时(x.y的形式),它会按以下顺序尝试查找: - 字典键值查找
- 属性或方法查找
- 数字索引查找
- 如果结果是可调用的,则调用它时不带参数。调用结果成为模板值。
模板标签
只能简单渲染变量显然不满足需求,django的模板系统中还提供了模板标签来实现更多的渲染逻辑,例如判断,循环等。
下面列出几个常用的模板标签:
for
循环浏览数组中的每个项目,使该项目可以在上下文变量中可用。例如,要显示student_list
中提供的学生列表:
<ul>
{% for student in student_list %}<li>{{ student.name }}</li>
{% endfor %}
</ul>
if
{% if %}
标签会判断给定的变量,当变量为 True 时(比如存在、非空、非布尔值 False),就会输出块内的内容:
{% if student_list %}学生的数量: {{ student_list|length }}
{% else %}没有学生
{% endif %}
四、template模板相关推荐
- flask 模板 php,Flask四之模板
四.模板 FMTV F:form表单 M:Model模型(数据库) T:Template模板 V:view视图(路由) 1.渲染模板 模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其 ...
- template模板函数
template模板 一个简单的字符串模板 var template = (function() { var cache = {};return function(obj, str) {if (!ty ...
- django之template模板层-60
django之template模板层-60 一.模板语言的变量 views.py def index(request): #模板语言的变量 name = 'Yven' addr = False age ...
- 设计模式之——Template模板模式
Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的 ...
- 第六章-template模板
第六章-template模板 文章目录 第六章-template模板 函数模板 类模板 函数模板 函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计 函数定义的 ...
- Ansible PLaybook template 模板详解
template 模板 模板是一个文本文件,可以做为生成文件的模版,并且模板文件中还可嵌套jinja语法 jinja2语言 网站:https://jinja.palletsprojects.com/e ...
- 【小白学习C++ 教程】十五、C++ 中的template模板和泛型
@Author:Runsen template模板在 C++ 中一个简单但非常强大的工具.简单的想法是将数据类型作为参数传递,这样我们就不需要为不同的数据类型编写相同的代码. C++ 添加了两个新关键 ...
- 微信小程序中template模板使用
小程序官方使用简介 模板 WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用. 定义模板 使用 name 属性,作为模板的名字.然后在内定义代码片段,如: <! ...
- 最短路常用的四种模板(poj1847)
针对于poj1847这道题,总结一下最短路常用的四种模板. ** Floyed(O(n^3)) ** #include<iostream> #include<cstdio> # ...
- LCA求解的四种模板
LCA求解的四种模板 或许更好的阅读体验 树剖在线求解LCA 思想 树剖这里就不多解释了,求解LCA的过程就是轻重链的跳转,跟树剖求任意两点间的距离一样的操作,只不过不用线段树去维护disdisdis ...
最新文章
- NCBI SRA数据库使用详解
- 手机上图片信息怎么拉一个矩形框_跟着黑鲨手机发布会学习PPT制作
- android webview底部黑条,去掉UIWebView底部的黑条
- mysql 服务器初始面膜_安全初始化MySql服务器
- 你真的了解Java中的三目运算符吗
- 最近项目中遇到的问题以及解决办法
- python上下文管理关键字_理解 Python 的上下文管理器
- 计算机网络专业学python_「非计算机专业」小白如何学好Python?
- 将 php 转换/编译为 EXE
- LiveNVR传统安防摄像机互联网直播-主要功能模块及相关技术特点与性能指标
- 基于Java毕业设计移动电商网站源码+系统+mysql+lw文档+部署软件
- 注册Flash8.ocx控件
- 腾讯云函数转华为云函数
- java seek_java中seek()的用法
- http请求 405错误 方法不被允许 (Method not allowed)
- 若依后台实现表连接查询显示,一对一查询
- adb和frida的一点简单使用记录
- 哲理故事与管理之道(21)-用情感激励下属
- 改springboot项目遇到的@Restcontroller返回网页问题
- php实现关键字搜索,php关键字搜索