zoukankan      html  css  js  c++  java
  • django模板系统---2

    1.模板渲染:

    ①通过给模板传递字典参数进行渲染

    注意:参数中键给前端模板中使用,值是视图函数中定义变量的值

    1.视图函数:
    def index(request):
        num = 100
        name = 'shige'
        l1 = ['大壮', '小壮', '壮壮', '中壮']
        d1 = {'name': '大壮', 'age': 73, 'hobby': 'xuefei+xiangxi'}
        xx = 'oo'
    
        class Animal:
            def __init__(self):
                self.kind = 'dog'
    
            def eat(self):
                return 'shi'
    
        a = Animal()
        return render(request,'login1.html',{'num':num,'name':name,'l1':l1,'d1':d1,'a':a})
    
    
    2.模板中:
    <body>
    
    <p>{{ num }}</p>    #100
    <p>{{ name }}</p>   #shige
    <p>{{ l1 }}</p>		#['大壮', '小壮', '壮壮', '中壮']
    <p>{{ d1 }}</p>		#{'name': '大壮', 'age': 73, 'hobby': 'xuefei+xiangxi'}
    <p>{{ a.kind }}</p>	 #dog
    <p>{{ a.eat }}</p>		#shi
    
    </body>
    

    ②模板系统中的“.",可以取出字典中的键值和列表中的值

    注意:列表取元素从0开始

    def index(request):
        d1 = {'name': '大壮', 'age': 73, 'hobby': 'xuefei+xiangxi'}
        l1 = ['大壮', '小壮', '壮壮', '中壮']
        return render(request,'login1.html',{'num':num,'name':name,'l1':l1,'d1':d1,'a':a})
    
    
    <body>
    <p>{{ d1.age}}</p>       #73
    <p>{{ d1.name}}</p>      #大壮
    <p>{{ l1.0}}</p>         #大壮
    <p>{{ l1.1}}</p>         #小壮 
    <p>{{ l1.2}}</p>         #壮壮
    </body>
    

    ③模板渲染传递对象

    注意:在模板渲染中,对象调用函数不能加括号,并且不能调用带参函数

    def index(request):
        class Animal:
            def __init__(self):
                self.kind = 'dog'
    
            def eat(self):
                return 'shi'
    
        a = Animal()
        return render(request,'login1.html',{'num':num,'name':name,'l1':l1,'d1':d1,'a':a})
    
    
    <body>
    <p>{{ a.kind }}</p>        #dog
    <p>{{ a.eat }}</p>         #shi
    </body>
    

    ④直接在render中传入locals(),即可把函数内部所有变量封装成键值对的字典传入到模板中

    注意:在前端模板使用时候,必须用视图函数中变量名调用,否则出错

    return render(request,'login1.html',locals())
    

    2.模板系统中的变量和过滤器:

    格式:{{ 变量名| 属性:' 参数' }}

    <p>{{ l1|length }}</p>  #列表长度
    <p>{{ vv|default:'啥也没有' }}</p>  #如果视图函数中没有vv变量,显示默认值,否则用视图函数中的值
    <p>{{ movesize|filesizeformat }}</p>  # 117.4 MB
    <p>{{ name|slice:':3' }}</p>      # 将字符串从哪切到哪
    <p>{{ now|date:'Y-m-d' }}</p>     # 2020-06-21
    <p>{{ words|truncatechars:'9' }}</p>    #字符留几个,其他用...    i love...
    <p>{{ words|truncatewords:'3' }}</p>    #单词留几个
    <p>{{ words|cut:' ' }}</p>            #空格移除
    <p>{{ l1|join:'+' }}</p>              #用+将列表元素拼接
    <p>{{ tag|safe }}</p>     #如果tag中有html标签,默认按照原字符串显示,如果加上safe属性,则按照html                                 样式显示
    

    3.模板系统中的标签:

    ①循环列表元素

    <ul>
      {% for name in l1 %}        #l1是一个列表 
        <li>{{ name }}</li>
      {% endfor %}
    </ul>
    
    
    

    image-20200621102352992

    ②循环字典元素

    <ol>
      {% for key,value in d1.items %}
        {{ forloop.counter }}
          <li>{{ key }} -- {{ value }}</li>
      {% endfor %}
    </ol>
    

    image-20200621102835786

    ③只循环字典中的key元素

    <ol>
      {% for key in d1.keys %}
        {{ forloop.counter }}
          <li>{{ key }}</li>
      {% endfor %}
    </ol>
    

    ④只循环字典中的value元素

    <ol>
      {% for value in d1.values %}
        {{ forloop.counter }}
          <li>{{ value }}</li>
      {% endfor %}
    </ol>py
    

    ⑤计数标签

    {{ forloop.counter }}          #从1开始计数 
    {{ forloop.counter0 }}         #从0开始计数 
    {{ forloop.revcounter }}          #从1开始倒序计数 
    {{ forloop.revcounter0 }}         #从0开始倒序计数 
    {{ forloop.first }}        #是第一次循环即为true
    

    ⑥empty

    {#<ul>#}
    {#   {% for foo in d3 %}#}
    {#       <li>{{ foo }}</li>#}
    {#   {% empty %}#}
    {#     <li>查询的内容啥也没有</li>#}
    {#  {% endfor %}#}
    {##}
    {#</ul>#}
    

    ⑦if标签

      {% if num > 10 %}
        <a href="">大于10</a>
      {% elif num < 10 %}
        <a href="">小于10</a>
      {% else %}
        <a href="">等于10</a>
      {% endif %}
    
      {% if d3|length > 3 %}
        <a href="">大于3</a>
        {% elif d3|length < 3 %}
         <a href="">小于3</a>
        {% else %}
          <a href="">等于3</a>
      {% endif %}
    

    ⑧with语句,起别名,方便引用

    <h1>{{ d2.hobby.0 }}</h1>    #字典嵌套列表
    
    {% with shitai=d2.hobby.0 %}      #其中=两边不能加空格
    {% endwith %}
    
    {% with d2.hobby.0 as shitai %}      #其中=两边不能加空格
    {% endwith %}
    

    4.crsf安全机制:

    ①在前端页面写入该标签,浏览器页面源码会出现以下信息,因此post请求可以提交

    注意:浏览器发起post请求需要提交一个信息,表明是该网站给浏览器的显示

      {% csrf_token %}
    

    image-20200621134046102

    5.模板继承:

    ①为什么需要模板继承:因为很多网页中很多内容是相同的,继承可以避免重新写

    {% extends 'muban.html' %}        #必须写在第一行
    
    {% block content %}
        替换的内容
     {% endblock %}
    

    6.组件:

  • 相关阅读:
    Python开源框架、库、软件和资源大集合
    java常用的框架介绍
    2016年7款最佳 Java 框架
    10款免费开源PHP框架
    10个提升MySQL性能的小技巧
    15个最受欢迎的Python开源框架
    Facebook's React vs AngularJS: A Closer Look
    用c#监控网络状态
    15种主要编程语言介绍及应用场合
    物联网常见通信协议梳理
  • 原文地址:https://www.cnblogs.com/zhuxianxiaofan/p/13172469.html
Copyright © 2011-2022 走看看