一、模板层:

          python的模板:HTML代码+模板语法

     模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。

import datetime

    t=datetime.datetime.now()

    # 方式1:
return HttpResponse("<h1>%s</h1>"%str(t)[:19]) # 方式2:
from django.template import Template, Context templateObj=Template("<h1 style='color:red'>current time: {{ time }}</h1>")
contextObj=Context({"time":str(t)}) html=templateObj.render(contextObj) return HttpResponse(html) #方式3(常用的)
return render(request,"time.html",{"time":str(t)[:19]})

二、模板语法之变量

在 Django 模板中遍历复杂数据结构的关键是句点字符  .

1.语法:

    {{var_name}}

views:

import datetime
li=[]
name="mqj"
i=100
l=[777,888,[55,55,99]]
d={"name":"mqj","age":""}
date = datetime.date(1993, 5, 2)
t=datetime.datetime.now()
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
def dream(self):
return "I an dream" person_egon = Person("egon", 1000)
person_alex = Person("alex", 9000)
person_nacha = Person("nacha", 10000) PersonList=[person_egon,person_alex,person_nacha] coutext="ddssdd dssdsad djjjd ddddd ccsd cdc dS SD Dcdcd"
label = "<a href=''>点击</a>" return render(request,"index.html",{"name":name,"l":l,"d":d,"date":date,"t":str(t),"person_egon":person_egon,"PersonList":PersonList,"coutext":coutext,"label":label,"i":i})

template: 

<p>{{ name }}</p>
<p>{{ l.2.1}}</p>
<p>{{ i }}</p>
<p>{{ d.age }}</p>
<p>{{ date.month}}</p>
<p>{{ t }}</p>
<p>{{ person_egon.name }}</p>
<p>{{ person_egon.age }}</p>
<p>{{ person_egon.dream }}</p>
<hr>
<p>{{ PersonList.0.name }}</p>
<hr>
{% for k,v in d.items %}
<p>{{ k }},{{ v }}</p>
{% endfor %} <hr>
{% for Proson in PersonList %}
<p>{{ Proson.name }}</p>
{% endfor %}
<hr>
{% for Proson in PersonList reversed %}
<p>{{ forloop.counter }}--{{ Proson.name }},{{ Proson.age }}</p>
{% endfor %}

三、模板之过滤器

1.语法

        {{obj|filter__name:param}}

2.date:

       如果 value=datetime.datetime.now()

      {{ date|date:"Y-m-d" }}

 3.default:

    如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:

      {{ li|default:"nothing" }}

4.safe:

  value="<a href="">点击</a>"

    {{ value|safe}}

5.slice:

   如果 value="hello world"

  {{ value|slice:"2:-1" }}

6.truncatechars

  如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

{{ value|truncatechars:9 }}

四、模板之标签 

1、for标签

遍历每一个字典:

{% for k,v in d.items %}
<p>{{ k }},{{ v }}</p>
{% endfor %}
可以利用{% for obj in list reversed %}反向完成循环。
2.遍历每一个元素:
{% for person in person_list %}
<p>{{ person.name }}</p>
{% endfor %}
3.注:循环序号可以通过{{forloop}}显示
forloop.counter0
从0开始
forloop.revcounter0       反向从直到0
forloop.revcounter         反向开始

如:
{% for Proson in PersonList reversed %}
<p>{{ forloop.counter }}--{{ Proson.name }},{{ Proson.age }}</p>
{% endfor %} 1、if 标签
{% if %}会对一个变量求值,如果它的值是“True”(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
{% if i > 100 %}
<p>{{ i }}</p>
{% elif i == 100 %}
<p>等于100</p>
{% else %}
<p>{{ i }}</p>
{% endif %}

2、with

    使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的

{% with a="mqj" %}
<p>{{ a }}</p>
{% endwith %}

3、csrf_token

  这个标签用于跨站请求伪造保护

五、自定义标签和过滤器步骤:     

1 、在settings中的INSTALLED_APPS,是否有当前应用

2 、在应用中创建一个templatetags

3 、在templatetags中创建py文件:mytag.py

4 、在mytag.py中:     

           引入:from django import template   

                   from django.utils.safestring import mark_safe     

                  register = template.Library() #register的名字是固定的,不可改变

5 、定义过滤器和标签   

       @register.filter

       def multi(x,y):

      return x*y

    @register.simple_tag

     def multiTag(x,y,z):

        return x*y*z

6 、 在引用模板中导入:{% load myTag %}

7 、 调用:

           过滤器:  {{var|filter_name:参数}}  # 参数只能是一个

           标签:    {% simple_tag 参数1 参数2 ... %}

对比过滤器与自定义标签的使用:
过滤器函数的参数只能有两个,自定义标签无参数限制
过滤器可以与逻辑标签共同使用,比如if标签。自定义标签不可以。
 
 
 

Django----模板层的更多相关文章

  1. Django模板层学习笔记

    一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...

  2. django——模板层

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  3. Django模板层

    一:模板简介 二:模板语法值变量 三: 模板之过滤器 四: 模板之标签 五:自定义标签和过滤器   一:模板简介 def current_datetime(request): now=datetime ...

  4. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

  5. Django模板层之templates

    一 模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now ...

  6. $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置

    0在python脚本中使用django环境 import osif __name__ == '__main__':    os.environ.setdefault("DJANGO_SETT ...

  7. $Django 模板层(变量、过滤器 、标签)、自定义(模板过滤器,标签)

    1 模版语法之变量:详见源码  -{{ 变量 }}:******重要******{#相当于print了该变量#} {#只写函数名 相当于()执行了#}<p>函数:{{ test }}< ...

  8. django模板层(templates)

    1.基础部分 通过使用模板,就可以在URL中直接调用HTML,它还是松耦合的,灵活性强,而且更容易维护 而且可以将变量通过一定的方式嵌入到HTML中,最终渲染到页面,总的来说基于模板完成了数据与用户之 ...

  9. django模板层之静态文件引入优化

    1.新手使用 我们一般在初学django的情况下,引入django的静态文件一般有如下两种方式: 通过路径引用: <script type="text/javascript" ...

  10. Django模板层2

    一.单表操作 1.1 开启test from django.test import TestCase import os # Create your tests here. if __name__ = ...

随机推荐

  1. JavaSE(四)之接口、访问控制

    上面我们学习了几个修饰符,在开发中经常会用的到,所以必须熟练的掌握.接下来我学习一下接口和访问控制. 一.接口 一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方 ...

  2. [bzoj 2017] [Usaco2009 Nov]硬币游戏

    一个多月没更博客了..(期间明白了自己有多傻逼. 这种问题大概就倒着做... f[i][j]:表示考虑剩下的硬币i..n,且之前的人取了j个时,先手最多拿到的钱数.aft[i]:表示硬币i..n的总钱 ...

  3. WERTYU(getchar()用法)

    题目连接:http://acm.tju.edu.cn/toj/showp.php?pid=13681368.   WERTYU Time Limit: 1.0 Seconds   Memory Lim ...

  4. HDU--2018

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  5. oracle 11g体系结构

    1.数据库体系结构 1.1 数据库和实例的关系database server  = instance 实例 + database 数据库instance 实例  =内存 memory + 进程  pr ...

  6. input框type=file设置cursor:pointer的问题

    为了让美化上传文件框,设置了cursor:pointer;,然而不起作用,然后百度找到了解决方法,设置font-size:0,这样就可以了.

  7. VMWare 安装ubuntu,虚机设置静态IP接入公网

    本文提供的kafka安装配置为Linux(ubuntu-16.04.3) 1.首先安装VMarea(14.0.0 build-6661328) 2.到http://www.ubuntu.org.cn/ ...

  8. IE8兼容border-radius.

    我们知道,CSS3新增的很多简洁优美的属性,比如border-radius.box-shadow.border-image.gradients.RGBA...因为这些属性的出现,我们可以很方便的就写会 ...

  9. C语言mktime()

    最近在调试stm32L151单片机,因为业务需要将从RTC获取的时间转换成时间戳.转换的时候发现获取的时间一直不对.一直被两个问题困扰. 1.从RTC获取出来的月份为什么比实际月份小1? 2.转换得来 ...

  10. 常用 Git 命令清单

    http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命 ...