Django之模板层

前面学习了Django的下载和基础的操作,掌握了其基本框架,接下来我们来学习Django中的模板语法。

学习任务:知道什么是模板,以及html+模板语法的具体用法

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

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

#原始的视图
def timeHandle(request):

    import datetime

    t=datetime.datetime.now()

#Django修改后的视图

    # 方式1:
    # return HttpResponse("<h1>%s</h1>"%str(t)[:19])

    # 方式2:
    from django.template import Template, Context
    templateobj=Template("<h2 style=‘color:red‘>current time:{{time}}</h2>")
    contextobj=Context({"time":str(t)})
    html=templateobj.render(contextobj)
    return HttpResponse(html)

    #方式3
#     return render(request,"time.html",{"time":str(t)[:19]})

 模板语法之变量

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

具体实例如下:

views:

def index(request):
    name=‘I am dreaming‘  #字符串
    i=100
    l=[111,222,333]    #列表
    dic={‘name‘:‘yuan‘,‘age‘:18}  #字典

    class Anminal(object):
        def __init__(self, name, color):
            self.name = name
            self.color = color

        def __str__(self):
            return self.name + str(self.color)

        def run(self):
            return ‘is running‘

    Anminal_dog1 = Anminal(‘拉布拉多1‘, ‘黑色‘)
    Anminal_dog2 = Anminal(‘拉布拉多2‘, ‘黑色‘)
    Anminal_dog3 = Anminal(‘拉布拉多3‘, ‘黑色‘)

    AnminalList = [Anminal_dog1, Anminal_dog2, Anminal_dog3]
    msg=[]    #空列表 

    label = "<a href=‘‘>点击</a>"

    return render(request,‘index.html‘,locals())
    # return render(request,‘index.html‘,{‘name‘:name,‘i‘:i,‘l‘:l,‘dic‘:dic,‘Anminal_dog1‘:Anminal_dog1,‘Anminal_dog2‘:Anminal_dog2,‘Anminal_dog3‘:Anminal_dog3,‘AnminalList‘:AnminalList})

templates:

<p>{{ name }}</p>
<p>{{ name| length }}</p>
<p>{{ name|slice:‘5:‘ }}</p>
<p>{{ i }}</p>
<p>{{ l }}</p>
<p>{{ l|length }}</p>
<p>{{ dic}}</p>
<p>{{ Anminal_dog1.name}}</p>
<p>{{ Anminal_dog1.color}}</p>
<p>{{ Anminal_dog3.run }}</p>
<p>{{ AnminalList }}</p>
<hr>
{% for foo in AnminalList reversed%}
<p>{{ foo }}</p>
{% endfor %}
<hr>
{{ msg|default:"" }}
<p>--------->{{ content|truncatechars:20 }}</p>
<p>{{ content|truncatewords:5 }}</p>

模板之过滤器

语法:{{obj|filter__name:param}}

default

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

{{ value|default:"nothing" }}

length

返回值的长度。它对字符串和列表都起作用。例如:

{{ value|length }}

filesizeformat

将值格式化为一个 “人类可读的” 文件尺寸 (例如 ‘13 KB‘‘4.1 MB‘‘102 bytes‘, 等等)。例如:

{{ value|filesizeformat }}

如果 value 是 123456789,输出将会是 117.7 MB。  

date

如果value=datetime.datetime.now()

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

slice

如果 value="hello world"

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

truncatechars

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

参数:要截断的字符数

例如:

{{ value|truncatechars:9 }}

如果value“Joel 是 a >,输出将为“Joel i ...”

safe

Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。比如:

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

{{ value|safe}}

模板之标签

标签看起来像是这样的: {% tag %}。标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。

一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})。

for标签

遍历每一个元素:

{% for person in person_list %}
    <p>{{ person.name }}</p>
{% endfor %}

可以利用{% for obj in list reversed %}反向完成循环。

遍历一个字典:

{% for key,val in dic.items %}
    <p>{{ key }}:{{ val }}</p>
{% endfor %}

自定义模板和过滤器 

具体步骤如下:

(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 ... %}

 模板继承

 

时间: 2024-11-08 14:11:57

Django之模板层的相关文章

Django -- 7.模板层

模板层 我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) 尽管这种技术便于解释视图是如何工作的,但直接将HT

Django基础模板层(75-76)

Django框架之模板层(d75)一 模版语法之变量: ** locals() 会把*该*视图函数内的变量,传到模板    ** return render(request, 'index.html', locals()) 1 {{ 变量 }}:******重要******{#相当于print了该变量#}  只写函数名:相当于函数名(),执行该函数,打印函数返回值 2 深度查询---->统一都用句点符 .  拓展:不能调有参数的方法二 模版之过滤器 1语法:{{第一个参数|过滤器名字:第二个参数

第五篇:Django的模板层

模板语法符号 {{ }}变量相关 模板层之模板传值 python基本数据类型全部支持传递给html文件 int.?oat.str.list.tuple.dict.set.bool 除此之外还可以传入函数,类和对象,其中函数和对象传入过去会自动加括号调用执行. 模板语法不支持传参,所以有参函数和调用类传参这些都不支持 后端给html文件传递数据的两种方式: 1.指名道姓 return render(request, 'index.html', {'n':n, 'f':f}) 2.locals()

053.Python前端Django框架模板层

模板层 一 模板语法之变量 在 Django 模板中遍历复杂数据结构的关键是句点字符, 语法: {{ var_name }} [[email protected] mysite]# cat app01/urls.py from django.urls import path,re_path from . import views urlpatterns = [ path("test/",views.test1,name="test1"), path("te

Django的模板层

将页面的设计和Python的代码分离开会更干净简洁更容易维护. 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题. django的模板:HTML代码+模板语法: def timer(request): import time now_time = time.time() # html = "<html><body>现在时刻:<h1>%s.</h1></body><

7 Django的模板层

你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) 尽管这种技术便于解释视图是如何工作的,但直

Django的模板层(1)

ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动. ORM是“对象-关系-映射”的简称 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (20), gender BIT defa

Django之模板层-自定义过滤器以及标签

自定义标签与过滤器 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 在app中创建templatetags模块(模块名只能是templatetags) 创建任意 .py 文件,如:my_tags.py from django import template # 该对象名必须是register register = template.Library() #自定义过滤器装饰器 @register.filter def mult

Django Template模板层 (下) ----------- 过滤器、人性化过滤器、模板继承、模板加载

---恢复内容开始--- 过滤器 除了模板标签可以帮助我们对数据或者进行逻辑处理.django 中还提供了一款工具叫做过滤器,过滤器也可以实现一些模板变量的运算,判断或是其他逻辑处理. add 语法: {{ var1|add:var2 }} add 过滤器可以实现 var1 与 var2 的相加,并且在遇到其他相同数据类型的,比如列表时,加号还可以重载为拼接功能 过滤器首先会将数据转换成Int类型,进行相加,如果转换失败,则会尝试使用 Python 中的数据类型 列表.元祖等这样的数据类型来进行