Templates模板语法
render参数介绍
request:就是一个HttpRsponse对象
template_name:可以是一个单独的模板,也可以是一个模板的列表
context:是一个字典,包含类将要插入/ 填充模板的变量,称之为上个文数据
content_type:指定响应的内容类型
status:指定响应的状态码
using:指定使用的模板引擎名字
模板中的变量格式为:{{变量名}},变量名由字母数字下划线组成,但是不能以下划线开头,否则会因为引擎无法解析导致服务端错误
在渲染页面时,若变量不存在,模板引擎默认用配置项string_if_invalid的值作为替代品,默认值为空字符串
当点后的值是可调用对象时,模板引擎在渲染时会当做无参函数进行调用,将调用的返回值插入模板。(Django不推荐我们在模板中做过多的逻辑处理,所以模板中的方法调全部为无参调用,即便是遇到有参的需求,那也应该是在后端处理,然后为模板提供处理结果即可
约定俗成:以下划线开头的变量属性通常被视为私有属性,可能无法访问
4)点后值的查找优先级如下
1、先进行: 字典key的查找
2、然后进行:属性或方法的查找
3、最后进行:数字索引的查找
{{ emp.id }},{{ emp.name }},{{ emp.sal }},{{ emp.dept.name }}
内置过滤器
语法:{{obj | 过滤器名称:过滤器参数}}
last:获取列表/元组的最后一个成员
first:获取list/tuple的第一个成员
length:获取数据的长度
default:当变量没有值的情况下,系统输出默认值
safe:让系统不必要对内容中的html代码进行字体转义
upper:字母转换成大写
lower:字母转换成小写
title:每个单词首字母转换成大写
date:日期时间格式转换
cut:从内容中截取掉同样字符的内容
list:把内容转换成列表格式
fileziseformat:把文件大小的数值转换成单位表示
join:按指定字符拼接内容
random:随机提取某个成员
forloop循环器,只能在for循环里使用,counter计数器
counter0 : #从0开始计数
counter:#从1开始
revcounter0: #倒数显示循环的次数,从0开始
revconter:#倒数显示循环的数次,从1开始
first:#判断如果本次是循环的第一次,则结果为True
last:#判断如果本次时循环的最后一次,则结果为True
parentloop:#在嵌套循环中,指向当前循环的上级循环
用法:
<td>{{ forloop.counter }}</td>
<td>{{ foo.name }}</td>
<td>{{ foo.address |default:'没有填写'}}</td>
<td>{{ foo.created_time | date:'Y-m-d H:i:s' }}</td>
模板嵌套继承
如果你在模版中使用 {% extends %} 标签,它必须是模版中的第一个标签。其他的任何情况下,模版继承都将无法工作
* 在base模版中设置越多的 {% block %} 盒子标签越好。请记住,子模版不必定义全部父模版中的blocks,所以,你可以在大多数blocks中填充合理的默认内容,然后,子模板只定义重写你需要的那一个盒子,没定义使用父模板的默认内容。多一点钩子总比少一点好。
* 为了更好的可读性,你也可以给你的 {% endblock %} 标签一个 名字 。例如:{``% block content``%``}``...``{``% endblock content ``%``},在大型模版中,这个方法帮你清楚的看到哪一个 {% block %} 标签被关闭了。
* 不能在一个模版中定义多个相同名字的 block 标签。
* 子模板里的{{ block.super }} # 表示父模板的默认内容展示出来 不会被重写内容覆盖
**#继承语法:
{% extends '文件名'%}
#重写模板语法
{% block 名字%}
重写内容
{% endblock%}**
#index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
{% block title %}
<title>默认标题</title>
{% endblock %}
</head>
<body>
<p>默认的页面头部(不怎么变化)</p>
{% block content %}
<p><a href="/ad.html/">默认的页面中间核心内容(每个页面都在变化</a></p>
{% endblock %}
<p>默认的页面尾部(不再怎么变化)</p>
</body>
</html>
#ad.html
{% extends 'index.html' %}
{% block title %}
<title>ad的标题</title>
{% endblock %}
{% block content %}
ad.页面
{% endblock %}
静态文件
开发中在开启了debug模式时,django可以通过配置,允许用户通过对应的url地址访问django的静态文件
setting.py,代码:
# 可以访问静态资源的配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
]
开发中在开启了debug模式时,django可以通过配置,允许用户通过对应的url地址访问django的静态文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)