一、模板由 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 分页插件(jQuery)

    参考:http://www.jb51.net/article/117191.htm 侵删 css 部分 @charset "utf=8"; *{ box-sizing: borde ...

  2. Spider-five

    一.Scrapy框架 1. Scrapy框架主要组成 a. Scrapy三个对象: request请求对象.response响应对象.item数据对象(字典) b. Scrapy五个核心组件: Spi ...

  3. 洛谷P3388 【模板】割点(割顶)(tarjan求割点)

    题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式: 第一行输出割点个数 第二行按照 ...

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

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

  5. 品牌电脑硬盘损坏后,使用MediaCreationTool从微软官方下载正版Windows到USB做安装盘

    最近我的一台台式机电脑的硬盘损坏了.一开始是速度逐渐变慢,后来慢得难以忍受,有时半天无响应.查看 Windows event ,发现有 id 为 7 的磁盘报错.使用 Windows 8.1 家庭版自 ...

  6. 最详细的C++对应C#的数据类型转换

    C++ ---------------------- C# LDWORD ----------------IntPtr LLONG-------------------Intptr bool ---- ...

  7. MyBatis笔记----Mybatis3.4.2与spring4整合:增删查改

    结构图 刚之前没什么区别,多了一个applicationContext.xml 包图 由于之前出了一点错误,有些包可能多加上了 数据库图 model User.java package com.ij3 ...

  8. 以太坊之——golang以太坊接口调用

    Go语言具有简单易学.功能强大,可跨平台编译等众多优势,所以这里选择以Go语言切入以太坊. 开始之前需要以下环境: Ubuntu(这里以ubuntu16.04为例) geth Ubuntu16.04安 ...

  9. SQLOS任务调度算法

    前些天在处理一个SQL Server LATCH导致的数据库停止响应问题时,遇到了一些需要SQLOS调度知识解决的问题,正好以前看过一篇官网的文章,在这里稍作修改贴出来. 原文网址如下: https: ...

  10. Java的基础知识四

    一.Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基 ...