django模板系统---2

Posted zhuxianxiaofan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>


技术图片

②循环字典元素

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

技术图片

③只循环字典中的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 %}

技术图片

5.模板继承:

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

{% extends ‘muban.html‘ %}        #必须写在第一行

{% block content %}
    替换的内容
 {% endblock %}

6.组件:

以上是关于django模板系统---2的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 片段在 Django 模板中不起作用

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

Django的模板系统

Django 模板系统2

VSCode自定义代码片段2——.vue文件的模板

Django模板过滤器 - 一行