栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

逆袭之路——python 模板语法之过滤器、标签、模板的继承、导入、ORM关键字使用【day54】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

逆袭之路——python 模板语法之过滤器、标签、模板的继承、导入、ORM关键字使用【day54】

今日内容概要
  • 模板语法之过滤器(类似于内置函数)
  • 模板语法之标签(类似于流程控制)
  • 自定义过滤器、标签、inclusion_tag
  • 模板的继承
  • 模板的导入
  • 测试环境搭建
  • ORM关键字使用
今日内容详细 一、模板语法之过滤器(类似于内置函数)
1.语法结构
	{{ 数据对象|过滤器名称:参数 }}  过滤器最多只能额外传输一个参数
2.常见过滤器(django模板语法提供了60+过滤器 我们了解几个即可)
	  

统计数据的长度:{{ s1|length }}

算术加法或者字符串加法:{{ n1|add:111 }}、{{ s1|add:'big baby' }}

将数字转成合适的文件计量单位:{{ file_size|filesizeformat }}、{{ file_size1|filesizeformat }}

判断当前数据对象对应的布尔值是否是False:{{ b|default:'前面的值对应的布尔值是False' }}、{{ s1|default:'前面的值对应的布尔值是False' }}

时间格式化:{{ ctime|date:'Y-m-d' }}

索引切片:{{ s1|slice:'0:8' }}

按照空格截取指定个数的文本:{{ s2|truncatewords:5 }}、{{ s1|truncatewords:1 }}

按照字符个数截取文本(包含三个点):{{ s2|truncatechars:5 }}、{{ s1|truncatechars:10 }}

移除指定的字符:{{ info|cut:'|' }}

是否取消转换:{{ tag1 }}、{{ tag1|safe }}、{{ scripts1|safe }}、{{ res }}

ps:最后一个|safe启发了我们以后用django开发全栈项目前端页面代码(主要指HTML代码)也可以在后端编写
二、模板语法之标签
"""
在django模板语法中写标签的时候 只需要写关键字然后tab键就会自动补全
"""
1.语法结构
	{% 名字 ...%}
	
  	{% end名字 %}
2.if判断
	{% if 条件1 %}
    	

你好啊

{% elif 条件2 %}

他好呀

{% else %}

大家好

{% endif %} 3.for循环 提供了forloop关键字 {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 4, 'revcounter0': 3, 'first': True, 'last': False} {% for i in l1 %}

{{ i }}

{% endfor %} """ for+if其他使用 {% for i in l1 %} {% if forloop.first %}

这是第一次循环

{% elif forloop.last %}

这是最后一次循环

{% else %}

中间循环

{% endif %} {% empty %}

for循环对象为空 自动执行

{% endfor %} """ ps:针对字典同样提供了keys、values、items方法
三、自定义过滤器、标签、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:666 }}

# 自定义简单标签:可以接收任意的参数
@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 %}
###left.html###
    {% for foo in l1 %}
  • {{ foo }}
  • {% endfor %}
'''该方法需要先作用于一个局部html页面 之后将渲染的结果放到调用的位置'''
四、模板的导入(了解)
类似于将html页面上的局部页面做成模块的形式 哪个地方想要直接导入即可展示

eg:有一个非常好看的获取用户数据的页面 需要在网站的多个页面上使用
  	策略1:拷贝多份即可
    策略2:模板的导入
   
使用方式
	{% include 'menu.html' %}
五、注释语法补充
  是HTML的注释语法
{##}		 是django模板语法的注释
"""
HTML的注释可以在前端浏览器页面上直接查看到
模板语法的注释只能在后端查看 前端浏览器查看不了
"""
六、模板的继承
类似于面向对象的继承:继承了某个页面就可以使用该页面上所有的资源
  
有很多网站的很多页面 其实都是差不多的 只是局部有所变化 模板的继承可以很好的实现该需求

1.先在模板中通过block划定将来可以被修改的区域
	{% block content %}
  		

主页内容

{% endblock %} 2.子板继承模板 {% extends 'home.html' %} 3.修改划定的区域 {% block content %}

登录内容

{% endblock %} 4.子页面还可以重复使用父页面的内容 {{ block.super }} """ 模板上最少应该有三个区域 css区域、内容区域、js区域 子页面就可以有自己独立的css、js、内容 """
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951656.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号