Django模板

一、模板的组成

组成:HTML代码+逻辑控制代码

二、逻辑控制代码

1、变量:使用双大括号引起来的变量 例:<p>{{name}}</p>

<!--HTML模板-->
<body>
    <h1 style="color: crimson">{{ yeas }}--{{ month}}--{{ day }}</h1>
</body>
#  python渲染

def dte(req, yeas, month, day):
    return render(req, 'index1.html', {'yeas': yeas, 'month': month, 'day': day})

  2、深度变量查找之句点号

模板不光能解析处理简单的字符串,还能处理更加复杂的数据结构,例如:list、dictionary和自定义的对象等。在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)

列表:

def demo(request):
    lis = ['张三', '李四', '王五']
    return render(request, 'demo.html', {'lis': lis})
<div>这次展现的是列表第一个值----{{lis.1}}</div>

 

 

   字典:

<div>这次展现的是字典的值----{{ map.name }}</div>
 zidian = {'name': "张三", "age": "12", "sex": ""}
    return render(request, 'demo.html', {'map': zidian})

  对象:

# 人物类
class Admin:
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def jieshao(self):
        return '我的名字是%s,性别%s,今年%s岁' % (self.name, self.sex, self.age)
# view
zhangsan = Admin("张三","12","")
    return render(request, 'demo.html', {'zs': zhangsan})
<div>这次展示的是自定义对象的方法----{{ zs.jieshao }}</div>

  3、变量过滤器(filter)

 语法:{{ obj | filter :parem}}------》{{变量 | 过滤器函数 :参数}}

<!--常用过滤器-->
 <!--
    1  add          :   给变量加上相应的值
    2  addslashes   :    给变量中的引号前加上斜线
    3  capfirst     :    首字母大写
    4  cut          :   从字符串中移除指定的字符
    5  date         :   格式化日期字符串
    6  default      :   如果值是False,就替换成设置的默认值,否则就是用本来的值
    7  default_if_none:  如果值是None,就替换成设置的默认值,否则就使用本来的值
 -->
<div>这次展示的是自定义对象的年龄加20----{{ zs.age|add:20 }}</div>
<div>字符串第一个大写{{ str|capfirst }}</div>
<div>字符串移除指定字符{{ str|cut:" " }}</div>
<div>时间格式控制{{ date|date:"Y-m-d" }}</div>
render(request, 'demo.html', {'strs': ''})
<div>空值则替换{{ strs|default:'空的列表'}}</div>   # 页面展示为“空的列表“
string = '<a href="12345/12345"> 12345</a>'
<div>渲染HTML标签{{ strs|safe}}</div>  <!--safe 会把标签渲染到页面而不是字符串-->
{% autoescape off %}
    <div>{{ strs }}</div>
{% endautoescape %}  <!--这种渲染会直接渲染出a标签和safe相同-->
<!--  显示渲染值大小{{ a|filesizeformat }}
      显示第一个值{{ a|first }}
      显示长度{{ a|length }}
      切割(参数为负值则从后往前切){{ a|slice:"3" }}-->

4、控制语句之tag标签的使用

  语法:{% 语句  %}

  • if--elif--else 判断
    <!--if判断语句 -->
        {% if zhangsan.age > 30 %}
            <h1>{{ zhangsan.name }}</h1>
        {% elif zhangsan.age > 10 %}
            <h1>{{ zhangsan.jieshao }}</h1>
        {% else %}
            <h1>{{ zhangsan.name }}年龄没超过10</h1>
        {% endif %}

     

  • if嵌套
    <!--if判断语句嵌套 -->
        {% if zhangsan.age > 30 %}
            {% if zhangsan.age < 50 %}  <!--里层判断-->
                <h1>{{ zhangsan.name }}的年龄在30-50之间</h1>
            {% else %}
                <h1>{{ zhangsan.name }}的年龄大于50</h1>
            {% endif %}  <!--每个end每个标签的结束标志-->
        {% elif zhangsan.age > 10 %}
            <h1>{{ zhangsan.jieshao }}</h1>
        {% else %}
            <h1>{{ zhangsan.name }}年龄没超过10</h1>
        {% endif %}
  • for循环
    <!--forloop.counter 循环计数器,
            counter0从0开始计数,
            forlooprevcounter倒序来
            forloop.first第一次循环换返回true,否则返回false
            -->
    <ul>
    {% for i in lis %}
        {% if forloop.first %}
            <li class="fir">
        {% else %}
            <li class="det">
        {% endif %}
        {{ i }}
        </li>
        {% empty %} <!--empty 用来判断是否为空列表-->
        <h1>没有数据</h1>
    {% endfor %}
    </ul>
  • csrf_token和url标签
    <form action="{% url "login"%}" >
              <input type="text">
              <input type="submit"value="提交">
              {%csrf_token%}
    </form>
    • {%csrf_token%}:防治跨站攻击验证
    • {%url "引用地址"%}:引用路由配置
  •  {%with%} :替换引用名
    {% with str=lis123456 %} 
        {{ str }}
    {% endwith %}
  • {%verbatim%}:禁止渲染,原样展现

 

posted @ 2020-11-16 17:30  过氧化氢  阅读(192)  评论(0编辑  收藏  举报