python视频笔记30(Django模板篇)

本文介绍了Django模板查找机制,指出在templates中建立app同名文件夹可避免找错模板。还阐述了模板的定义、标签、过滤器、反向解析、模板继承、HTML转义、CSRF防护和验证码的作用及使用方法,帮助开发者更好地运用Django模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。这样设计有利当然也有弊,有利是的地方是一个app可以用另一个app的模板文件,弊是有可能会找错了。所以我们使用的时候在 templates 中建立一个 app 同名的文件夹,这样就好了。

这就需要把每个app中的 templates 文件夹中再建一个 app 的名称,仅和该app相关的模板放在 app/templates/app/ 目录下面,

例如:项目 zqxt 有两个 app,分别为 tutorial 和 tryit


zqxt
├── tutorial
│   ├── __init__.py
│   ├── admin.py
│   ├── models.py
│   ├── templates
│   │   └── tutorial
│   │       ├── index.html
│   │       └── search.html
│   ├── tests.py
│   └── views.py
├── tryit
│   ├── __init__.py
│   ├── admin.py
│   ├── models.py
│   ├── templates
│   │   └── tryit
│   │       ├── index.html
│   │       └── poll.html
│   ├── tests.py
│   └── views.py
├── manage.py
└── zqxt
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

定义模板

变量:视图传递给模板的数据 要遵守标识符规则
语法:
{{var}}
注意:如果使用的变量不存在,则插入的是空字符串
在模板中使用点语法
当成字典处理 如果不是则当成属性或者方法 最后 为数字索引
在模板中调用对象的方法

不能传递参数

标签

语法:
{% tag%}
作用:

	在输出中创建文本
	控制逻辑和循环

if

格式:
{%if 表达式1%}
		语句 
{%end if%}

{%if 表达式2%}
		语句
{%else%}
		语句
{%end if%}

for

格式:
{%for 变量 in 列表%}
	语句
{%enf for%}

{%for 变量 in 列表%}
语句
{%empty%}
语句
{%endfor%}
列表为空或者列表不存在 执行下一个语句

{{forloop.counter}}
表示当前是第几次循环

comment

作用:注释多行
语法:
{%comment%}
注释的内容
{%endcomment%}

ifqual/ifnotequal

作用:判断是否相等或者不相等
格式
{%if equal值1:值2%}
语句
{%endqual%}

include

作用:加载模板并以标签内的参数渲染
格式:
{%include'模板目录' 参数1 参数2%}

url

作用:反向解析
格式
{%url'namespace:name' p1 p2%}

csrf_token

作用:用于跨站请求伪造保护的
格式:{%csrf_token%}

block \ extends

作用:用于模板的继承
格式

autoescape

作用:用于HTML的转义

过滤器

语法:
{{var|过滤器}}
作用:
在变量被显示前修改它

lower

upper

<h1>{{str|upper}}</h1>
<h1>{{str}}</h>

过滤器可以传递参数,参数用引号引起来
join

格式:
列表 |join:‘#’

如果一个变量没有被提供, 或者值为False ,空 可以使用默认值
default

格式:
{{var|default:'good'}}

根据给定格式转换日期为字符串

格式{{dateVal|date:'y-m-d'}}

加减乘除:

<h1>num = {{num}}</h1>
<h1>num = {{num|add:10}}</h1>
<h1>num = {{num|add :-5}</h1>
<h1>num = {{%num widthratio num 1 5%}}</h1>     num *5  num/1 *5
<h1>num = {{%num widthratio 5 1 % }}</h1>   num/5

注释

单行注释
语法

{#注释的内容#}

多行注释

{%comment%}
注释的内容
{%endcomment%}

反向解析

APp/urls
在这里插入图片描述
index.html
在这里插入图片描述
urls.py
在这里插入图片描述

good.html
在这里插入图片描述
views.py
在这里插入图片描述
在这在这里插入图片描述里插入图片描述

模板继承

作用:
模板继承可以减少页面的内容的重复定义,实现页面的重用
block标签:

语法:
{%block 标签名%}
{%endblock 标签名%}
在父模板预留区域,子模版去填充

extend 标签

继承模板,需要卸载模板文件第一行
语法:
{%extend ‘父模板路径’%}

eg:
定义父模板
定义子模版
base.html
在这里插入图片描述
main.html
在这里插入图片描述
detail.html
在这里插入图片描述
url.py
在这里插入图片描述
view.py
在这里插入图片描述
127.0.0.1:8000/main
在这里插入图片描述
127.0.0.1:8000/detail
在这里插入图片描述

HTML转义

问题
views.py
在这里插入图片描述
index.html
在这里插入图片描述
1270.0.0.1:8000/index
在这里插入图片描述
直接将接受到的code当成普通字符串来渲染

需要将接受到的字符串当成HTML代码

escape:
在这里插入图片描述在这里插入图片描述
safe
在这里插入图片描述
在这里插入图片描述
autoescape(解决多个)
在这里插入图片描述

CSRF

跨站请求伪造
某些恶意网站包含链接,表单,按钮,会利用登陆用户在浏览器中认真 从而工具服务
防止方法:
在settings.py文件MIDDLEWARE中
在这里插入图片描述
或者
在自己的网页源码中
在这里插入图片描述

验证码

作用:
在用户注册,登陆页面得时候使用,为了防止暴力请求,减轻服务器得压力,防止csrf得方式
参考文档
https://blog.youkuaiyun.com/teavamc/article/details/77566781

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值