一、模板由 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基础的更多相关文章

  1. Template 基础篇-函数模板(待看

    Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...

  2. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  3. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)

    Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...

  4. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级

    前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...

  5. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  6. Python 3 集合基础和概念!

    Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...

  7. [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念

    上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...

  8. [Python] 文科生零基础学编程系列三——数据运算符的基本类别

    上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的 ...

  9. Python中Template使用的一个小技巧

    Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用. from string import Template s = Template("there ...

随机推荐

  1. SqlHelper模板

    在实际开发中,我们不会直接使用拼写SQL语句的方法进行数据库操作,而是使用参数化的方法进行数据库操作,这样做的好处很多,不仅提高了程序的健壮性,同时也避免的SQL注入的问题.在这里,笔者为初学者提供一 ...

  2. mybatis加载属性

    1): <dataSource>的<property>标签加载属性 在 properties 元素体内定义的属性首先被读取 然后会读取 properties 元素中 resou ...

  3. es6 语法 (对象扩展)

    { //简洁表示法 let o = 1; let k = 2; let es5 = { o:o, k:k }; let es6 = { o,k }; console.log(es5,es6); //1 ...

  4. 洛谷P3038 [USACO11DEC]牧草种植Grass Planting

    题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirectional road ...

  5. ios12怎么投屏电脑 苹果手机怎么投

    Ios12系统发布成功之后,是不是给我们带来更大的惊喜呢.我们只需要利用手机上的屏幕镜像就可以轻松将手机画面投屏至电脑上,那么ios12怎么投屏电脑?下面便是今天所要分享的手机投屏的方法. 使用工具: ...

  6. 解决在TP5中无法使用快递鸟的即时查询API

    快递鸟的接口对接其实很简单,先去官网注册账号,登陆把基本信息填好,然后在产品管理中订购一下“物流查询”,免费,不过其他产品是收费,免费的有对接口调用频率限制,结合自己的应用流量够用就可以. 使用前复制 ...

  7. Java之static作用的全方位总结

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  8. Git 结合Git使用Bitbucket进行代码版本管理流程规范与实践

    结合Git使用Bitbucket进行代码版本管理流程规范与实践   By:授客 QQ:1033553122   目录 目录 1 一. 测试环境 2 二. 新建项目 2 三. 新建公有版本库 3 四. ...

  9. Spotlight on Mysql详细介绍

    Spotlight on Mysql详细介绍   by:授客 QQ:1033553122     1. 版本 2. 使用介绍 1) 主页 会话面板 MySQL面板 INNODB面板 存储面板 主机面板 ...

  10. 配置 Sublime Text 3 作为Python R LaTeX Markdown IDE

    配置 Sublime Text 3 作为Python R LaTeX Markdown IDE 配置 Sublime Text 3 作为Python IDE IDE的基本功能:代码提醒.补全:编译文件 ...