Django之模板

模板的定义:

(1)变量:视图传递给模板的数据

变量要遵守标识符规则   {{var}}

注意:1.如果使用的变量不存在,则插入的是空字符串

2. 在模板中使用点语法:当做字典来处理或属性方法          {{stu.name}}

3. 在模板中使用对象的方法    注意:不能传递参数

(2)标签

语法:{% tag %}

作用:在输出中创建文本,控制逻辑和循环

1if:    格式:{% if 表达式%}语句{%endif%}    或    {% if 表达式1%}语句1{%elif 表达式2%}语句2{%endif%}

扫描二维码关注公众号,回复: 42884 查看本文章

2For:格式

{%for 变量 in 列表%}语句{%endfor%}

{%for 变量 in 列表%}语句{%empty%}语句2{%endfor%} (列表为空,或者列表不存在时候执行语句2)

{{forloop.counter}}:表示当前是第几次循环

实例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <h1>学生列表</h1>
    <ul>
        {%for student in students%}
             <li>
                {{forloop.counter}}--{{student.sname}}--{{student.scontend}}
            </li>
        {% empty %}
            <li>目前没有学生</li>
        {%endfor%}
    </ul>
</body>
</html>

3)Comment

格式:{% comment %}注释的内容{% endcomment %}

作用:注释多行

4)ifequal/ifnotequal

if相似,作用:判断是否相等/是否不相等

格式:{% ifequal 1 2%}语句{% endifequal %}    解释:如果值1等于值2,则执行语句。

5)include:加载模板并以标签内的参数渲染

格式:{% include ‘模板目录’ 参数1 参数2%}

6)url:反向解析

格式:{% url ‘namespace:name’ p1 p2 %}

7)csrf_token

作用:用于跨站请求伪造保护

格式:{% csrf_token %}

8)block extends:用于模板的继承

9)autoescape:用于html转义

(3)过滤器:

语法:{{ var|过滤器 }}

作用:在变量在显示前修改它

示例:views.py

def students(request):
    studentsList = Students.objects.all()
    return render(request,'myApp/students.html',{"students":studentsList,'str':'good man'})

传入一个字符串str

Students.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <h1>学生列表</h1>
    <ul>
        {%for student in students%}
             <li>
                {{forloop.counter}}--{{student.sname}}--{{student.scontend}}
            </li>
        {% empty %}
            <li>目前没有学生</li>
        {%endfor%}
    </ul>
    <h1>{{str|upper}}</h1>
</body>
</html>

当前的意思是将str中的字符变成大写,并非修改字符的本身

相当于重新拿了在生成以便

过滤器都有:lower(小写),upper(大写)

过滤器可以传递参数,参数用引号引起来

(3) join:格式:{{列表|join:’#’}}

实例:views.py

def students(request):
    studentsList = Students.objects.all()
    return render(request,'myApp/students.html',{"students":studentsList,'str':'good man','list':['good','nice','handsome']})

Students.html中加入:

<h1>{{list|join:'#'}}</h1>

结果:good#nice#handsome


如果一个变量没有被提供,或者值为False,空,可以使用默认值:

default:格式:{{var|default:’good’}} 

实例:<h1>{{test|default:'没有'}}</h1>

*日期:根据给定格式转换日期为字符串:date

格式:{{dateVal|date:’y-m-d’}}

*HTML转义:escape

*加减乘除:

<h1>num = {{num|add:10}}</h1>     <!--加10-->
<h1>num = {{num|add:-5}}</h1>     <!--减5-->
<h1>num = {% widthratio num 1 5 %}</h1>   <!--乘以5-->
<h1>num = {% widthratio num 2 1 %}</h1>   <!--除以2-->

实例:若要将奇偶行不同颜色

<ul>
    {%for student in students%}
        {%if forloop.counter|divisibleby:2%}
         <li style="color:red">
            {{forloop.counter}}--{{student.sname}}--{{student.scontend}}
         </li>
        {%else%}
        <li style="color:blue">
            {{forloop.counter}}--{{student.sname}}--{{student.scontend}}
        </li>
        {%endif%}
    {% empty %}
        <li>目前没有学生</li>
    {%endfor%}
</ul>

 

(4)注释

1)单行注释

{#内容#}

2)多行注释

<!--内容-->

模板继承

可以减少页面的内容的重复定义,实现页面的重用

block标签:在模板中预留区域,子模板去填充

用法:{% block 标签名 %}

  {% endblock 标签名 %}

extends标签:继承模板,需要写在模板文件的第一行

用法:{% extends 父模板路径 %}

示例:

Base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #header{
            width: 100%;
            height: 100px;
            background-color: red;
        }
        #footer{
            width: 100%;
            height: 100px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div id="header">header</div>
    <div id="main">
        {% block main%}

        {% endblock main%}
    </div>
    <div id="footer">footer</div>
</body>
</html>

Main2.html页面中

{% extends 'myApp/base.html'%}

{% block main %}
    <h1>Good job!</h1>
{% endblock main %}

结果:

HTML转义

在函数中传入<h1> sunck is a good man!</h1>

页面中照样显示<h1> sunck is a good man!</h1>

按字符串传入

 

解决:要传入的字符当做HTML代码处理

普通传入{{code}}

转义传入{{code|safe}}

解决大量的转义:off为转义,on为不转义

{% autoescape off %}

{{code}}

{% endautoescape %}

 

CSRF

跨站请求伪造:某些恶意的网站包含链接、表单、按钮、js,利用登录用户在浏览器中认证,从而攻击服务(例子,不同源的POST提交表单,访问数据库造成恶意攻击)

防止CSRF

①在setting.py文件中的MIDDLEWARE中增加:'django.middleware.csrf.CsrfViewMiddleware'

(但是在此同时也会讲自己给封掉)

②在表单里面加上{% csrf_token %} 但没有绝对的安全         (在此就自己就可以访问)




猜你喜欢

转载自blog.csdn.net/weixin_38654336/article/details/80040892
今日推荐