zoukankan      html  css  js  c++  java
  • Django----模板层

    一、模板层:

              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":"22"}
        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标签。自定义标签不可以。
     
     
     
  • 相关阅读:
    Docker镜像操作——Mongo安装
    Docker镜像操作——Tomcat安装
    《Google的软件测试之道》(2)
    《Google的软件测试之道》(3)
    Docker镜像操作——Sql Server安装(未成功)
    ASP.NET网站开发步骤
    Docker镜像操作——Oracle安装
    《Google的软件测试之道》(1)
    Docker镜像操作——Redis安装
    rfkill
  • 原文地址:https://www.cnblogs.com/mengqingjian/p/7724744.html
Copyright © 2011-2022 走看看