django 之模板层
1. 模板语法之变量
- 格式:
{{ 变量名 }}
句点符,深度查询(可以点到方法,不要加括号,只能是无参的方法) - 代码
视图函数:
from django.shortcuts import render
from django.utils.safestring import mark_safe
class Person:
def __init__(self,name):
self.name=name
@classmethod
def class_test(cls):
print('class method')
return 'class method'
def test(self):
print('method')
return self.name
# def __str__(self):
# return self.name
def index(request):
ss='lqz is big'
i=20
ll=['lqz',18,[1,2,[2,3]]]
ll4=[[1,2,3],[2,3,4],[1,2,9]]
dic={'name':'lqz','age':18,'t':[1,2,[2,3]]}
b=True
lqz=Person('lqz')
egon=Person('egon')
xiaohou=Person('xiaohou')
monkey=Person('monkey')
ll2=[lqz,egon,xiaohou,monkey]
dic2={'lqz':lqz,'egon':egon}
# print(lqz.class_test())
# print(dic['name'].upper)
ll3=[]
ss2=''
ss3='<a href="https://www.baidu.com">点我</a>' #链接
ss3=mark_safe(ss3) #不用转义网页正常显示
import datetime
now=datetime.datetime.now()
file=1024*1024*1024
return render(request,'index.html',locals()) #locals渲染所有的内容
# return render(request,'index.html',{'ss':ss,}) #指定单个内容渲染
模板:
<body>
<hr>
<p>字符串:{{ ss }}</p>
<p>数字:{{ i }}</p>
<p>列表:{{ ll }}</p>
句点符,做深度查询
<p>列表第2个值:{{ ll.2.2.0}}</p>
<p>布尔类型:{{ b}}</p>
<p>字典:{{ dic }}</p>
<p>字典取值:{{ dic.age }}</p>
<p>字典取值:{{ dic.t.2.1 }}</p>
<p>对象:{{ lqz }}</p>
<p>对象取值:{{ lqz.name }}</p>
执行方法,不要加括号,
<p>对象方法:{{ lqz.test }}</p>
<p>类方法:{{ lqz.class_test }}</p>
注释:前端看不到,django给处理了
{#<p>类方法:{{ Person}}</p>#}
<p>列表对象{{ ll2 }}</p>
<p>列表对象取值{{ ll2.1 }}</p>
<p>列表对象取值,在取值{{ ll2.1.name }}</p>
<p>对象字典{{ dic2 }}</p>
<p>对象字典取值{{ dic2.egon.name }}</p>
<p>空列表的情况{{ ll3 }}</p>
直接替换成空
<p>空字符串的情况{{ ss2 }}</p>
<p>a标签 {{ ss3 }}</p>
<h4>字典:{{ ss.upper }}</h4>
<h4>字典:{{ dic.name.upper }}</h4>
2.模板语法之过滤器
模板:
(1) date
注:冒号后不能加空格 now是第一个参数,冒号后面是第二个参数
<p>date过滤器 {{ now|date:'Y-m-d:H:i:s' }}</p>
<p>date过滤器 {{ now|date }}</p>
(2)default
如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:
<p>default过滤器 {{ ss2|default:'字符串没有值' }}</p>
<p>default过滤器 {{ ll3|default:'列表没有值' }}</p>
(3)length 返回值的长度。它对字符串和列表都起作用
<p>length过滤器 {{ ll2|length }}</p>
(4) filesizeformat
将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:
<p>filesizeformat过滤器 {{ file|filesizeformat }}</p>
<p>filesizeformat过滤器 {{ 1024|filesizeformat }}</p>
(5)slice 切片操作(同py数据类型切片)
<p>slice过滤器 {{ 'lqzisbig'|slice:'1:9' }}</p>
(6)truncatechars 截断字符
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾
<p>truncatechars过滤器 {{ 'lqzisbigdddddddeee'|truncatechars:9 }}</p>
<p>truncatewords过滤器: {{ 'lqz is big and egon is small'|truncatewords:3 }}</p>
(7)safe 让django 不要转义网页,正常显示
<p>safe过滤器: {{ ss3|safe }}</p>
{#可以在视图函数里处理 ss3 = mark_safe(ss3)#}
(8)add 俩参数可以传字符串和数字,具体详见源码
<p>add过滤器: {{ 12|add:"3" }}</p> 结果:15
<p>add过滤器: {{ 'eee'|add:"3rrr" }}</p> 结果:eee3rrr
3. 模板语法之标签
3.1 for 标签
<h1>模板语法之标签</h1>
{# ll = ['lqz', 18, [1, 2, [2, 3]]]#}
{% for foo in ll %}
<p>{{ forloop }}</p>
{# 循环序号可以通过{{forloop}}显示 #}
{# {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 3, 'revcounter0': 2, 'first': True, 'last': False}#}
<p>{{ forloop.counter }}</p> #当前循环索引从1开始计数 123
<p>{{ forloop.counter0 }}</p> #从0开始 012
<p>{{ forloop.revcounter }}</p> 321
<p>{{ forloop.revcounter0 }}</p> 210
<p>{{ forloop.first }}</p> #判断每次循环出的数是否是第一或者最后一次
<p>{{ forloop.last }}</p>
{# 遍历每一个元素#}
<p>{{ foo }}</p>
{# 判断实例:#}
{% if forloop.first %}
lqz is big
{% elif forloop.last %}
两人都小
{% else %}
egon is small
{% endif %}
{% endfor %} #必须要有结尾
#parentloop用法
{# ll4 = [[1, 2, 3], [2, 3, 4], [1, 2, 9]]#}
{% for foo in ll4 %}
{% for i in foo %}
<p>{{ forloop }}</p>
{# 在内层循环中拿到外层循环的forloop#}
<p>{{ forloop.parentloop }}</p>
{% endfor %}
{% endfor %}
# 循环出字典的值
{% for i in dic.values %}
<p>{{ i }}</p>
{% endfor %}
<hr>
{% for i in dic.keys %}
<p>{{ i }}</p>
{% endfor %}
<hr>
{% for key,value in dic.items %}
<p>{{ key }}---->{{ value }}</p>
{% endfor %}
3.2 for... empty
- 作用:for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作
<!--视图中ll3=[]-->
{% for foo in ll3 %}
<p>{{ foo }}</p>
{% empty %} #要放在在for循环中,如果循环的对象为空,往下执行结果为'没有值'
没有值
{% endfor %}
3.3 with
- 作用:使用一个简单的名字缓存一个复杂的变量
{% with tt=dic.name %}
或者{% with dic.name as tt %}
给取出的内容重新赋值给tt
<p>{{ dic.name }}</p>
<p>{{ tt }}</p>
{% endwith %}
3.4 if
- 作用:{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
{% if num > 100 or num < 0 %}
<p>无效</p>
{% elif num > 80 and num < 100 %}
<p>优秀</p>
{% else %}
<p>凑活吧</p>
{% endif %}
注:if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
4. 自定义过滤器和标签
4.1 自定义过滤器
- 步骤
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 写函数 addstr(用register.filter()装饰)
7 模板内容:
{% load my_test %}
{{'lqz'|addstr:'isbig' }} #最多只能传两个参数
- 代码:
my_test文件:
from django import template
register=template.Library()
@register.filter(name=tt)
def addrstr(x,y):
return x+y
模板:
<h1>自定义过滤器</h1>
{% load my_test %}
{# 过滤器可以是函数名,也可以是name指定的值 @register.filter(name=tt)#}
{{ 'lqz'|addrstr:'isbig' }} #lqzisbig 最多只能传两个参数
4.2 自定义标签
- 步骤:
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 写函数
@register.simple_tag(name='yy')
def my_sum(x,y,z,i):
return x+y+z+i
7 模板:
{% load my_test %}
{% yy 12 34 56 78 %} #以空格做分割,传参数
代码:
my_test文件:
from django import template
@register.simple_tag(name='hh')
def sun(x,y,z):
return x+y+z
模板:
{% load my_test %}
{% hh 5 4 7 %} #以空格作分割,传参数
- 自定义的过滤器,可以放在if判断里,
自定义的标签,不能放在if判断里条件里
4.2 静态文件导入
方式一:
<link rel="stylesheet" href="/static123/mycss.css">
方式二:
{% load static %}
<link rel="stylesheet" href="{% static 'mycss.css'%}">
方式三:
{% load static %}
<link rel="stylesheet" href="{% get_static_prefix %}dd/ss/mycss.css">
5. 模板导入与继承
5.1 模板导入
1 把公共部分,放到html里,比如叫 left.html
2 想在哪里用 导入{% include 'left.html' %}
5.2 模板继承
1 写一个母模板 base.html
2 要更改的地方在block标签编辑
{% block base %}
母模板的盒子里也可以写东西
{% endblock %}
3 在其他文件中调用母模板{%extends 'base.html' %}
4 建盒子编辑自己的内容;
{% block base %}
自己的东西
{% endblock my_head%}
5 用母版里的内容({{block.super}} 放在那,原来母版里的东西,就会渲染在哪)
{% block base %}
{{block.super}}
自己的东西
{% endblock my_head%}
注:(1)如过不继承母模板盒子,它会用原来的内容;如果继承了,没写自己的东西,它会空白;写自己的内容就是什么内容,
通过{{block.super}},可渲染出原来母模板的内容
(2)盒子再继承时,跟顺序无关
6. inclusion_tag
- 作用:返回html代码片段
- 步骤
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 @register.inclusion_tag('test.html')
def my_inclusion(n):
data=[]
for i in range(n):
data.append('第%s行'%i)
return {'data':data}
7 写test.html页面
<ul>
{% for choice in data %}
<li>{{ choice }}</li>
{% endfor %}
</ul>
8 视图函数中要渲染的页面
{% load my_test %}
{% my_inclusion 10 %} #它会返回html的页面
django 之模板层的更多相关文章
- python 全栈开发,Day69(Django的视图层,Django的模板层)
昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...
- Django的模板层简介
Django的模板层 如果我们想要利用视图函数返回一个页面,一种比较简单的方式是利用HttpResponse()方法返回一个含有html内容的字符串: def current_datetime(req ...
- 04-01 Django之模板层
Django之模板层 一 模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图函数进行处理,而视图函数在经过一系列处理后必须要有返回信息给浏览器.如果我们要返回html标签.cs ...
- Django框架-模板层
Django框架-模板层 一.模板语法传值 1.验证是否python所有的数据类型都可以传递到前端 locals()的妙用:该方法虽然好用,但是在某些情况下会造成资源的浪费 结论:整型.浮点型.字符串 ...
- Django之模板层细说
django的模板层,基于我们前面学习的内容,也知道主要语法是{{变量相关}}{%逻辑相关%},那么具体还有哪些内容呢?且听我娓娓道来. 模板层(模板语法) 标签 过滤器 自定义标签,过滤器,incl ...
- Django基础模板层(75-76)
Django框架之模板层(d75)一 模版语法之变量: ** locals() 会把*该*视图函数内的变量,传到模板 ** return render(request, 'index.html' ...
- Django基础——模板层(template) (Day67)
阅读目录 变量 标签 自定义过滤器和标签 模板层(template) 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. 1 2 3 4 ...
- 5、Django之模板层
一 模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图函数进行处理,而视图函数在经过一系列处理后必须要有返回信息给浏览器.如果我们要返回html标签.css等数据给浏览器进行渲 ...
- 053.Python前端Django框架模板层
模板层 一 模板语法之变量 在 Django 模板中遍历复杂数据结构的关键是句点字符, 语法: {{ var_name }} [root@node10 mysite]# cat app01/urls. ...
- Django的模板层
一 模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now ...
随机推荐
- java多线程学习笔记(七)
volatile关键字 关键字volatile的主要作用是使变量在多个线程间可见. public class PrintString { private boolean isContinue = tr ...
- ES6/ES2015核心内容 import export
ES6/ES2015核心内容:https://www.cnblogs.com/doit8791/p/5184238.html Javascript ES6学习 import export https ...
- mysql数值字符串类型的按照数值进行排序
今天遇到一个问题,就是对mysql数值字符串类型进行排序,在默认情况下使用order by 字段名称 desc/asc 进行排序的时候,mysql进行的排序规则是按照ASCII码进行排序的,并不会自动 ...
- SQLAlchemy应用到Flask中
安装模块 pip install Flask-SQLAlchemy 加入Flask-SQLAlchemy第三方组件 from flask import Flask # 导入Flask-SQLAlche ...
- UVA 12672 Eleven(DP)
12672 - Eleven Time limit: 5.000 seconds In this problem, we refer to the digits of a positive integ ...
- 自增主键与UUID的优缺点
自增主键 自增ID是在设计表时将id字段的值设置为自增的形式,这样当插入一行数据时无需指定id会自动根据前一字段的ID值+1进行填充.在MySQL数据库中,可通过sql语句AUTO_INCREMENT ...
- Java7中的try-with-resources
首先,我们看下面的代码. BufferedReader br = null; try { br = new BufferedReader(new FileReader("test.txt&q ...
- layui修改表格行高
.layui-table-cell { height: auto !important; white-space: normal; }
- Goldengate 部署oracle10g在 rac asm环境,完整教程
前言 Goldengate再rac 环境部署,和单机部署区别还是有点大,主要存在环境上. 环境 oracle10g ,sid=rac 准备工作 1.在rac节点,配置监听动态注册,确保goldenga ...
- 程序猿必备的10款web前端动画插件
1.基于jQuery的瀑布流图片筛选插件 瀑布流的展现方式在目前的网页中用得越来越广泛,特别是图片和首页文章的动态加载. 今天分享的这款就是基于jQuery的瀑布流图片筛选插件,我们可以点击图片分类名 ...