django模板语法和模块层
模板语法之过滤器
过滤器从字面的意思上,可以理解为:过滤掉不需要的,剩下我们需要的
{{ 数据对象|过滤器名称:参数 }} 过滤器最多只能额外传输一个参数
常见的过滤器
过滤器 |
过滤器说明 |
length |
获取数据的长度 |
add:'n' |
算术加法或者字符串加法 |
file_size,filesizeformat |
将数字转成合适的文件计量单位 |
default |
判断当前数据对象对应的布尔值 |
date:'Y-m-d' |
时间格式化 |
slice:'0:8' |
索引切片 |
truncatewords:5 |
按照空格截取指定个数的文本 |
cut:' ' |
'移除指定的字符 |
safe |
默认不对变量内的字符串进行html转义 |
<p>统计数据的长度:{{ s1|length }}</p>
<p>算术加法或者字符串加法:{{ n1|add:111}}、{{ s1|add:'big baby' }}</p>
<p>将数字转成合适的文件计量单位:{{ file_size|filesizeformat }}、{{ file_size1|filesizeformat }}</p>
<p>时间格式化:{{ ctime|date:'Y-m-d' }}</p>
<p>索引切片:{{ s1|slice:'0:8' }}</p>
<p>按照空格截取指定个数的文本:{{ s2|truncatewords:5 }}</p>
<p>按照字符个数截取文本(包含三个点):{{ s2|truncatechars:5 }}、{{ s1|truncatechars:10 }}</p>
<p>移除指定的字符:{{ info|cut:'|' }}</p>
<p>是否取消转换:{{ tag1 }}、{{ tag1|safe }}、{{ scripts1|safe }}、{{ res }}</p>
模板语法之标签
使用Django中的标签可以在模板中做一些简单的逻辑判断。 标签和{% %}配合使用
{% 名字 ...%}
{% end名字 %}
{% if 条件1 %}
<p>内容1</p>
{% elif 条件2 %}
<p>内容2</p>
{% else %}
<p>内容3</p>
{% endif %}
提供了forloop关键字
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 4, 'revcounter0': 3, 'first': True, 'last': False}
正常的for循环输出
{% for i in l1 %}
<p>{{ i }}</p>
{% endfor %}
{% for i in l1 %}
{% if forloop.first %}
<p>这是第一次循环</p>
{% elif forloop.last %}
<p>这是最后一次循环</p>
{% else %}
<p>中间循环</p>
{% endif %}
{% empty %}
<p>for循环对象为空 自动执行</p>
{% endfor %}
'提供了keys、values、items方法'
user{name:'jason',age:18}
{% for foo in user %}
{{ foo }}
{{ endfor }}
{% for foo in user.keys %}
{{ foo }}
{{ endfor }}
{% for foo in user.values %}
{{ foo }}
{{ endfor }}
{% for foo in user.items %}
{{ foo }}
{{ endfor }}

自定义过滤器、标签、inclusion_tag
1.在应用下需要创建一个名为templatetags的文件夹
2.在该文件夹内创建一个任意名称的py文件
3.在该py文件内需要先提前编写两行固定的代码
from django import template
register = template.Library()
自定义过滤器
@register.filter(is_safe=True)
def index(a, b):
return a + b
{% load mytag %}
{{ n1|index:333 }}
自定义标签
@register.simple_tag(name='my_tag')
def func1(a, b, c, d):
return a + b + c + d
{% my_tag 1 2 3 4 %}
自定义inclusion_tag
@register.inclusion_tag('left.html')
def func2(n):
l1 = []
for i in range(1, n + 1):
l1.append(f'第{i}页')
return locals()
{% func2 10 %}
<ul>
{% for foo in l1 %}
<li>{{ foo }}</li>
{% endfor %}
</ul>
'''
该方法需要先作用于一个局部html页面 之后将渲染的结果放到调用的位置
'''

模块的导入
将页面的某一个局部当成模块的形式
哪个地方需要就可以直接导入使用即可
{% include '导入html文件名' %}
<!----> 是HTML的注释语法
{
"""
HTML的注释可以在前端浏览器页面上直接查看到
模板语法的注释只能在后端查看 前端浏览器查看不了
"""
模块的继承
你需要事先在你想要使用的主页面上划定区域做好标记,之后在子页面继承的时候你就可以使用在主页面划定的区域,也就意味着,如果你不划定任何区域,那么你子页面将无法修改主页面内容
'有很多网站的很多页面 其实都是差不多的 只是局部有所变化 模板的继承可以很好的实现该需求'
1.先在模板中通过block划定将来可以被修改的区域
{% block content %}
<h1>主页内容</h1>
{% endblock %}
2.子板继承模板 利用block自动提示选取你想要修改的内容区域标记名称
{% extends 'home.html' %}
3.修改划定的区域
{% block content %}
<h1>登录内容</h1>
{% endblock %}
4.子页面还可以重复使用父页面的内容
{{ block.super }}
"""
模板上最少应该有三个区域
css区域、内容区域、js区域
子页面就可以有自己独立的css、js、内容
"""
模板继承语法
1.继承
{% extends '模版页面名' %}
2.局部修改
{% block '名字' %}
模版内容(666)
{% endblock %}
{% block '名字' %}
子版内容
{{ block.super }}
{% endblock %}
前期数据准备
"""
django自带的sqlite3数据库 功能很少 并且针对日期类型不精确
1.数据库正向迁移命令(将类操作映射到表中)
python3 manage.py makemigrations
python3 manage.py migrate
2.数据库反向迁移命令(将表映射成类)
python3 manage.py inspectdb
"""
需求
我们只想操作orm 不想使用网络请求
需要有专门的测试环境
1.自己搭建
import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day54.settings")
import django
django.setup()
2.pycharm提供
python console

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗