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的静态文件
posted @   家购诗  阅读(81)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示