Python:Day53 Template基础
一、模板由 html代码+逻辑控制代码 组成
二、逻辑控制代码的组成
1、变量(使用双大括号来引用变量)
语法格式:{{ var_name }}
-----------------------Template和Context对象
(venv) C:\Users\Lowry\PycharmProjects\django_template>python manage.py shell
>>> from django.template import Context,Template
>>> t=Template("my name is {{name}}") #逻辑控制代码一定要写在引号里面
>>> c=Context({'name':"alex"})
>>> t.render(c)
'my name is alex' #同一模板多个上下文
1、多次创建模板
>>> for name in ("john","julie","pat"):
... t=Template("hello,{{name}}") #缩进必须要有
... print(t.render(Context({"name":name})))
...
hello,john
hello,julie
hello,pat 2、一次创建多次渲染
>>> t=Template("my name is {{name}}")
>>> for name in ("john","alex","kobe"):
... print(t.render(Context({"name":name})))
...
my name is john
my name is alex
my name is kobe
----------------------------万能句点号,用于特殊变量的取值。点后面接的是对象的属性,这个要和filter的方法区分开。
-----------------------views
import datetime def index(request):
obj="alex"
s=[111,222,333,"alex"]
s1={"username":"alex","age":18}
s2=datetime.datetime.now() class person():
def __init__(self,a,b):
self.name=a
self.age=b
s3=person("yuan",18) return render(request,"index.html",{"name":s3}) -------------------------index.html
{#{{ name }}#}
{#{{ name.username }}#}
{{ name.name }}
{{ name.age }}
2、{% if %}的使用
{% if True %} //if后面接的是表示True或False的对象,可以是Ture或False,也可以是字符串、数字,但字符串必须要加引号,如果不加引号解释器会认为是变量。
<p>hello world</p>
{% elif obj %} //这个obj在这里是变量,对应视图函数中render返回中的第三个参数
<p>hello 2</p>
{% endif %}
3、{% for %}的使用
----------------------views def index(request):
s=[111,222,333,"alex"] return render(request,"index.html",{"obj":s}) ----------------------index.html {% for i in obj %}
<p>{{ forloop.counter }}:{{ i }}</p> //结果:1:111 2:222 3:333 4:alex
<p>{{ forloop.counter0 }}:{{ i }}</p> //结果:0:111 1:222 2:333 3:alex
<p>{{ forloop.revcounter }}:{{ i }}</p> //结果:4:111 3:222 2:333 1:alex
<p>{{ forloop.revcounter0 }}:{{ i }}</p> //结果:3:111 2:222 1:333 0:alex
{% endfor %}
4、filter的使用
语法格式: {{obj|filter:param}}
filter其实是上模板语言提供的方法,它是将前面的一个对象传到后面的方法中,有参数的在过滤器后面加冒号,然后加参数,处理过后再返回值,虽然有很多方法和python很像,但是不是python的,不要搞混。
---------------------views def index(request):
ret="alex" return render(request,"index.html",{"obj":ret}) ---------------------index.html {{ obj|upper }} //ALEX
{{ obj|lower }} //alex
{{ obj|first }} //a
{{ obj|first|upper }} //A
{{ obj|capfirst }} //Alex
add过滤器
---------------------------views def index(request):
s4=6
return render(request,"index.html",{"obj":s4}) ---------------------------index.html {{ obj|add:5 }} //结果:11
cut过滤器
--------------------------views def index(request):
s5="hello world"
return render(request,"index.html",{"obj":s5}) --------------------------index.html {{ obj|cut:"or" }} //结果:hello wld,如果cut的是字符串,要记得加上引号
date过滤器
--------------------------views def index(request):
s2=datetime.datetime.now()
return render(request,"index.html",{"obj":s2}) --------------------------index.html {{ obj|date:"y-m-d" }} //18-05-08,后面的格式要用引号引起来
{{ obj|date:"Y-m-d" }} //2018-05-08
default过滤器:如果值是False就替换成设置的默认值,否则就是用本来的值
-----------------------------------views def index(request):
s6=[]
return render(request,"index.html",{"obj":s6}) -----------------------------------index.html {{ obj|default:"空的" }}
{% autoescape off%}:注意这里是加在{% %}中的
#没加之前的效果
--------------------------------views def index(request):
s7="<a href='#'></a>"
return render(request,"index.html",{"obj":s6}) --------------------------------index.html {{ obj }} //<a href='#'>跳转</a> #加过之后的效果
--------------------------------views def index(request):
s7="<a href='#'></a>"
return render(request,"index.html",{"obj":s6}) --------------------------------index.html {% autoescape off %}
{{ obj }} //跳转
{% endautoescape %}
safe过滤器:和上面起到的效果一样,都是让浏览器去渲染这个标签
--------------------------------views def index(request):
s7="<a href='#'></a>"
return render(request,"index.html",{"obj":s6}) --------------------------------index.html {{ obj|safe }} //跳转
其它过滤器:
-----------------------views def index(request):
s5="hello world"
return render(request,"index.html",{"obj":s5}) -----------------------index.html {{ obj|filesizeformat }} //0 bytes,为什么是0?
{{ obj|length }} //11
{{ obj|slice:":-1" }} //hello worl
{% csrf_token %}:csrf_token标签
用于生成csrf_token的标签(其实就是一个input标签),用于防治跨站攻击验证。这个Input标签是隐藏的,名字为:csrfmiddlewaretoken,value是一堆字符串。
-------------------------------------views def login(request):
if request.method=="POST":
return HttpResponse("登陆成功")
return render(request,"login.html") -------------------------------------index.html <form action="/login" method="post">
<p>姓名:<input type="text" name="username"></p>
<p>密码:<input type="text" name="password"></p>
<input type="submit">
{% csrf_token %}
</form>
这里有一点需要注意的,这个方法只适用于render,对于render_to_response不适用,如果想使用需要额外加命令。
{% url %}
--------------------------------urls urlpatterns = [
path('admin/', admin.site.urls),
path('login', views.login,name="abc"),
] --------------------------------views def login(request):
if request.method=="POST":
return HttpResponse("登陆成功")
return render(request,"login.html") --------------------------------login.html <form action="{% url "abc" %}" method="post">
<p>姓名:<input type="text" name="username"></p>
<p>密码:<input type="text" name="password"></p>
<input type="submit">
{% csrf_token %}
</form>
{% verbatim %}:不进行render渲染
{% verbatim %}
{{ obj }}
{% endverbatim %}
{% load %}:在HTML文件中加载自定义的simple_tag和filter时用的。
自定义simple_tag和filter
1、在app中创建templatetags文件夹或包
2、在templatetags中创建.py文件
from django import template
from django.utils.safestring import mark_safe register = template.Library() #register的名字是固定的,不可改变 @register.simple_tag
def myadd(v1):
return v1+1001 @register.filter
def myplus(v1,v2):
return v1+v2
3、在HTML文件中引入py文件,然后进行调用
{% load my_tags %} 可以在HTML最上面,可以不在
{% myadd 1 %} #simple_tag用{% %}包着
{{ num|myplus:12 }} #filter和其它自带filter一样都是用{{ }}包着
4、一定要在settings中的INSTALL_APPS配置当前app,不然Django无法找到文件
注意:filter中最多只能有两个参数,而simple_tag中可以多个,但是simple_tag不能用在for或if后面,而filter可以
{% if num|myplus:20 > 100 %}
<h1>大于100 </h1>
{% endif %}
Python:Day53 Template基础的更多相关文章
- Template 基础篇-函数模板(待看
Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...
- 深度学习入门者的Python快速教程 - 基础篇
5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...
- [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...
- Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级
前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python 3 集合基础和概念!
Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...
- [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念
上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...
- [Python] 文科生零基础学编程系列三——数据运算符的基本类别
上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的 ...
- Python中Template使用的一个小技巧
Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用. from string import Template s = Template("there ...
随机推荐
- 用kafka实现消息推送
一个人知道的Topic是单点推送,大家都知道Topic是广播. kafka消息消费机制: 1.广播消费:通过定义topic前缀来标识属于广播的消息(例如:topicname:gonggao153568 ...
- 输出映射resultType
√1:简单类型 √2:简单类型列表 √3:POJO类型只有列名或列名的别名与POJO的属性名一致,该列才可以映射成功只要列名或列名的别名与POJO的属性名有一个一致,就会创建POJO对象如果列名或列名 ...
- vim编辑器的设置
1.vim编辑器设置分为两种设置,临时设置和永久设置 2.临时设置开启和关闭高亮模式(目前高亮模式是开启的) etc/ man.config vim man.config 在文本编辑器中命令行模式下输 ...
- 如何将字符串格式的对象转换成真正的js对象?
1.如何将字符串格式的对象转换成真正的js对象? <script>//eval 的作用eval('var a = 100');console.log(a);</script> ...
- php对二维数据排序
对于一维数组排序比较简单,像使用sort(),asort(),arsort()等函数进行排序,但是对于二维数组比较麻烦,所有借鉴网上的总结了一下 // 对二维数组进行指定key排序 $arr 二维数组 ...
- BZOJ 1022: [SHOI2008]小约翰的游戏John (Anti-nim)
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3134 Solved: 2003[Submit][Status][Discuss] Descripti ...
- 判断NaN的真假
isNaN(val) 当val为NaN的时候,isNaN(val)返回ture 当val不为NaN的时候,isNaN(val)返回false
- C# 动态加载程序集信息
本文通过一个简单的实例,来讲解动态加载Dll需要的知识点.仅供学习分享使用,如有不足之处,还请指正. 在设计模式的策略模式中,需要动态加载程序集信息. 涉及知识点: AssemblyName类,完整描 ...
- (办公)百度api的使用
这个只是入门,详细的还得看官方的文档http://lbsyun.baidu.com/index.php?title=jspopular3.0/guide/helloworld 百度地图的“Hello, ...
- Docker Data Center系列(三)- DTR安装指南
本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 成为UCP管理的 ...