DjangoMTV知识点总结之视图

模板:用于加载渲染网页
定义模板:
    --->变量:视图传递给模板的数据,语法:{{var}}。如果没传变量,则插入空字符串。
        --->也可以传入对象,对象可以使用属性和方法,语法:{{obj.params}}或{{obj.method}},但是方法不能再传入参数,且方法不能用'()'调用方法
    --->标签:语法{% tag %},在输出中创建文本,控制逻辑和循环。注意,所有的标签都对应有end标签
        --->if...elif...else:
            --->格式:{% if 表达式%}
                        html语句
                     [//以下可选
                        {%elif 表达式%}
                        html语句
                        {%else 表达式%}
                        html语句
                     ]
                      {%endif%}
            --->示例:    {% if score >= 90 %}
                        <p>优秀的很</p>
                        {% elif 70 <= score < 90 %}
                        <p>还不错啊</p>
                        {% else %}
                        <p>还要努力</p>
                        {% endif %}
        --->for:empty语句,当列表是空或不存在的时候,才执行。forloop.counter,在for语句块中使用,代表当前执行到第几轮循环,从1开始计数。
            --->格式:{% for 变量 in 可迭代对象%}
                        html语句
                     [//以下可选
                     {% empty %}
                        html语句
                     ]
                     {% endif %}
            --->示例:    {% for item in mylist %}
                        第{{forloop.counter}}循环的值是:{{item}};
                        {% endfor %}
                        //上面是迭代列表,下面是迭代对象
                        {% for v,k in mymap.items %}
                        第{{forloop.counter}}次循环的键值对是:{{v}}:{{k}}--
                        {% endfor %}
        --->comment:多行注释,位于这个标签内的语句都不会显示
            --->示例:{% comment %}
                        some statement
                      {% endcomment %}
        --->ifequal,ifnotequal:类似于if,判断两个值是否相等,相等(或不等)时,执行标签内的语句
            --->格式:{% ifequal value1 value1 %}
                        语句
                      {% endifequal %}
                      
        --->include:加载模板,并以标签内的参数渲染
            --->格式:{% include '模板目录' param1 param2 ... %}
        --->url:用于反向解析
            --->格式:{% url 'namespace:name' param1 param2 ... %}
        --->csrf_token:用于跨站伪造请求的保护
        --->block, extends:用于模板的继承
        --->autoescape:用于html的转义
        --->widthratio:乘、除法运算,格式:{% widthratio num 除数 乘数 %},通过调整乘数和除数实现乘法除法或结合运算
    --->过滤器:在数据显示器,对数据进行转换。过滤器可以级联。如:{{ test | upper | join:'-' | default:'空列表' }}
        --->格式:{{ var | fliter [| otherfliter]}}
        --->lower:字符串转为小写
        --->upper:字符串转为大写
        --->过滤器可以传递参数,参数用引号括起来,如:{{var | join:'#'}},表示把var中的元素用#连接起来
            --->示例:{{ mylist | join:'-'}}, mylist = ['nice','to','meet','you'],渲染后在页面中显示:nice-to-meet-you
        --->如果一个变量没有被提供值,或者值为false,可以用default默认值,格式:{{var | default:'无值'}}
        --->加法运算:{{ num | add:num}}
        --->减法运算:{{ num | add:负数}}
        --->除法运算:{{ num | divisiblely:除数}}
    --->注释:单行注释: {# 语句 #},标签内的会被注释掉,而不会显示
        多行注释,见comment标签
    --->反向解析:用于解决模板中超链接变化问题。如果url用硬编码的方式,当url发生改变时,需要修改一系列相关的url。
        --->解决办法:用变量组合的方式定义url。
        --->格式:{% url 'namespace:name' parma1 parma12 ... %}
        --->实现:
            --->在主项目urls.py中给定义namespace:这里namespace是'app',include()指定namespace时,第一个参数需要传入元组(url匹配文件,应用名称):
            urlpatterns = [path(r'', include(('myApp.urls', 'myApp'), namespace='app')),]
            --->在子项目myApp的urls.py中定义url的名称:这里的name是'tpl',url模式中有数字结尾
            urlpatterns= [url(r'^good/(\d+)$',    view = good, name='good'),]
            --->在模板中使用组合URL:123就是传给上面的url模式的数字结尾的参数,用于匹配模式中的数字
            <a href="{% url 'myApp:good' 123 %}" >good</a>
    --->模板继承:实现页面的重用,相关标签:
        --->block标签:在父模板中预留空位,由子模板去填充。
            --->语法:{% block name %}
                       中间内容由继承的子模板填充
                      {% endblock name %}
        --->extends标签:在子模板中第一行,表示继承于哪个父模板
            --->语法:{% extends '父模板路径'%},示例:{% extends 'myApp/base.html' %}
        --->继承:在子模板中,在block标签内填充内容
            示例:子模板中:{% block details %}
                                <h2>i'm details !</h2>
                            {% endblock details %}
    --->html转义:如果view中返回的数据中有html语句,如果不转义,则直接输出语句,如果进行转义,可以把数据的html语句进行渲染
        --->输入示例:return render(request, 'myApp.tpl', {'h5': '<h1>my string</h1>;})
        --->在模板中,用转义过滤器:{{h5 | safe}},则会转义。用于单行语句的转义。
        --->在模板中,用autoescape标签:用于多行语句的转义。
            {% autoescape off %}
                {{h5}} //这个标签内的自动转义被关闭,所以h5可以被转义为html语句进行渲染
            {% endautoescape %}
        --->在模板中,用转义过滤器:{{h5 | escape }}可以让autoescape标签中多行转义语句中某行语句不转义,否则等同不加过滤器效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值