一、模板由 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. JS中数组重排序方法

    在数组中有两个可以用来直接排序的方法,分别是reverse()和sort().下面通过本文给大家详细介绍,对js数组重排序相关知识感兴趣的朋友一起看看吧 1.数组中已存在两个可直接用来重排序的方法:r ...

  2. angular select 默认值

    <select ng-model="selected" ng-options="x.id as x.name for x in users">< ...

  3. angularJs - cynthia娆墨旧染-响应式文章发布系统

    (0)功能 a.添加新文章 b.修改已发布文章 c.搜索已经发布的文章 d.demo链接:   http://cynthiawupore.github.io/angularJS (1)界面 a.文章列 ...

  4. CSS网页中导入特殊字体@font-face属性详解

    @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中. 语法规则 首先我们一起来看看@font-face的语法规则: @font-face { font-fami ...

  5. echarts功能配置实例----柱/折线、饼图

    ---恢复内容开始--- echarts中的柱状图和折线图的参数配置可以共用,一般只需要修改图表类型这一个参数即可. 一.echarts最简单的实例 1.折线图/柱状图 <html> &l ...

  6. 浅析C/C++中的switch/case陷阱

    浅析C/C++中的switch/case陷阱 先看下面一段代码: 文件main.cpp #include<iostream> using namespace std; int main(i ...

  7. Python GUI编程实例

    import os from time import sleep from tkinter import * from tkinter.messagebox import showinfo class ...

  8. Spark MLlib线性回归代码实现及结果展示

    线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析. 这种函数是一个或多个称为回归系数的模型参数的线性组合.只有 ...

  9. The JSP specification requires that an attribute name is

    把另一个博客内容迁移到这里 七月 10, 2016 10:23:12 上午 org.apache.catalina.core.ApplicationDispatcher invoke 严重: Serv ...

  10. mssql sqlserver 模拟for循环的写法

    转自:http://www.maomao365.com/?p=6567 摘要: 下文讲述sql脚本模拟for循环的写法,如下所示: /* for样例 for('初始值','条件','执行后自增') 通 ...