模板:用于加载渲染网页
定义模板:
--->变量:视图传递给模板的数据,语法:{{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标签中多行转义语句中某行语句不转义,否则等同不加过滤器效果
DjangoMTV知识点总结之视图
最新推荐文章于 2021-09-03 17:55:48 发布