Python django-05 模板层
2020-12-13 13:55
标签:存在 语法 日期 nbsp lap image open you mic 一 模板语法 二 后端向前端html文件传值的两种方式 三 模板传值的数据类型格式 支持传输的数据类型: 四 前后端取消转义 {{ zzz|safe }} 五 模板语法过滤(有点类似于python中数据类型的内置函数) 1.在Django的模板语言中,通过使用 过滤器 来改变变量的显示。 过滤器的语法: {{ value|filter_name:参数 }} 2.注意: 3.常用过滤器(Django的模板语言中提供了大约六十个内置过滤器。) 前端统计字符串的长度:{{ s|length }} 前端获取数据如果是空就返回default后面默认的参数值:{{ flag|default:‘你这个东西是个空‘}} 将数字格式化成表示文件大小的单位:{{ file_size|filesizeformat }} 按照空格截取文本内容:{{ res|truncatewords:4 }} 格式化时间(不要加百分号){{ ctime|date:‘Y-m-d‘ }} {{ ‘hahah‘|add:‘heheheh‘ }} {{ l|slice:‘0:3‘ }} {{ l|slice:‘0:5:2‘ }} 4.自定义过滤器 #1.必做的三件事 #2.如何使用 #自定义标签 # 自定义inclusion_tag 工作原理: 六 模板语法标签 {%%} 1.for循环 {{ foo }} {{ forloop }} 这是我的第一次 这是最后一次了啊 嗨起来!!! 你给我的容器类型是个空啊,没法for循环 forloop 2.if 判断 flag不为空 flag是空 3.for循环和if判断嵌套 这是我的第一次 这是最后一次了啊 嗨起来!!! 4.with(相当于python中定义的变量):定义一个中间变量,多用于给一个复杂的变量起别名。注意等号左右不要加空格。 七 模板的继承 1.当多个页面整体的样式都大差不差的情况下 可以设置一个模板文件,在该模板文件中 使用block块划分多个预期,之后子版在使用模板的时候 可以通过block块的名字 来选定到底需要修改哪一部分区域 2. 3.使用 # 母模板 # 子模板 八 模板的导入 1.当你写了一个特别好看的form表单/列表标签等,可以将它当成一个模块 哪个地方需要 就直接导入使用即可 模板html文件 要导入的html文件 Python django-05 模板层 标签:存在 语法 日期 nbsp lap image open you mic 原文地址:https://www.cnblogs.com/tfzz/p/11546304.html在前段页面中书写
模板语法两大类
1. {{}} 变量相关
2.{%%} 逻辑相关
# 第一种字典{k:v}的形式,html文件中接收的变量名要与字典的k一样
n=1
return render(request,‘index.html‘,{‘n‘:n})
# 第二种locals()形式,会将视图函数名称空间的所有名字传过去浪费资源,html文件中接收的变量名要与视图函数中的变量名一致
return render(request,‘index.html‘,locals())
后端:
整型
浮点型
字符串 # 前端不支持点索引取值,但python中支持
列表 # html文件中可以列表点索引取值
{{ ls.0 }}
字典 # html文件中可以字典点k取值,k不加引号
{{ d.name }}
元组 # html文件中可以元组点索引取值
{{ ls.0 }}
集合
函数名 # 前端页面会加括号自动调用展示返回值,但不支持传参函数
对象 # 会打印该对象,html文件中可以对象点属性方法(不带参数的)
django模板语法在取值的时候 统一使用句点符(大白话就是 点号 .)#}
第一种方式后端操作
# 后端:mark_safe(标签和内容)
例:
from django.utils.safestring import mark_safe
zzz = mark_safe(‘
阿萨德搜啊第三款垃圾袋
‘)
return render(request,‘reg.html‘,locals())
第二种方式
# 前端:|safe
{#1.过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
2.过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
3.过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:‘, ‘ }}
4.‘|‘左右没有空格没有空格没有空格
1.length:作用于统计字符串和列表的长度,当不能统计长度时值为0。
1.在应用名下新建一个名为templatetags文件夹(必须叫这个名字)
2.在该新建的文件夹内新建一个任意名称的py文件
3.在该py文件中需要固定写下面两句代码
from django import template
register = template.Library()
# 后端templatetage文件夹下的mytag.py文件
from django import template
register = template.Library()
# 自定义过滤器
@register.filter(name=‘baby‘) # name后可以自定义名字
def index(a,b):
print(‘下午刚起床 一脸懵逼‘)
return a + b
#前端HTML文件中
{% load mytag %} # 加载
{{ 123|baby:1}} # 前端页面显示124(自定义过滤器 只能由两个形参,)
1.做和自定义过滤器相同的三步骤:
2.后端
from django import template
register = template.Library()
# 自定义标签 # 支持传多个值 @register.simple_tag(name=‘jason‘) # name值可以为其他的 def xxx(a,b,c,year): return ‘%s?%s|%s{%s‘%(a,b,c,year) 3.前端 {% load mytag %} # 加载 {% jason 1 2 3 year=2 %} # 支持传多个参数 参数与参数之间 空格隔开即可
1.
# 后端
from django import template
register = template.Library()
# 自定义inclusion_tag
@register.inclusion_tag(‘bigplus.html‘) # 参数为html2文件
def bigplus(n): # 函数参数
ls = []
for i in range(n):
ls.append(‘第%s项‘%i)
return {‘ls‘:ls}
#html1文件
{% load mytag %}
{% bigplus 5 %}
#htm2文件
{% for foo in ls %}
1.常用语法:
{% for foo in l %}
2.empty:当你的for循环对象为空的时候会自动走empty代码块儿的内容{% for foo in l %}
{% if forloop.first %}
{% elif forloop.last %}
{% else %}
{% endif %}
{% empty %}
{% endfor %} {% if flag %}
# if语句支持 and 、or、==、>、=、in、not in、is、is not判断。 {% for foo in l %}
{% if forloop.first %}
1.第一种方式
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
2.第二种方式{% with business.employees.count as total %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
模板一般情况下 应该至少有三个可以被修改的区域
{% block css %}
子页面自己的css代码
{% endblock %}
{% block content %}
子页面自己的html代码
{% endblock %}
{% block js %}
子页面自己的js代码
{% endblock %}
#####其他html代码 子模板继承不可修改
div class="col-md-10">
{#这是模板语法的注释 不会展示到前端#}
{# 在你想把某一个页面作为模板的时候 可以在该页面上使用block划分区域 并且给该区域命名#}
{# 之后你在使用该模板的时候 就可以通过名字 来指定需要修改哪一个区域的内容#}
{% block content %} # 划分区域命名,子模板继承后可修改此区域
div class="jumbotron">
h1>Hello, world!h1>
p>...p>
p>a class="btn btn-primary btn-lg" href="#" role="button">Learn morea>p>
div>
{% endblock %}
div>
###不需要其他代码
{% extends ‘home.html‘ %} # 参数为母模板文件名
{{ block.super }} # 显示划分区域的html代码,
{% block css %} # 对母模板换分区域修改 style> h1 { color: red; } style> {% endblock %}
##无其他代码
h1>我是一个特别特别的好看的form表单h1>
# 在使用的地方导入
{% include ‘beautiful.html‘ %} # 参数为模板文件名