Django 模板

Django 使用 模板语言 的目的是使前端代码与后端代码分离(解耦)
模板语言 = html + 逻辑控制语句

模板语言参数解释:
    向HTML 中的time 变量赋值
    其中:
    第一个参数是 request 对象
    第二个参数是模板
    第三个参数是上下文
    return render(request,"cur_time.html",{"time":ctime})

模板语法:

1. {{变量名}}   , 示例如下:

后台:
def cur_time(request):
    ctime=datetime.datetime.now()
    #向HTML 中的time 变量赋值
    #其中:
    # 第一个参数是 request 对象
    # 第二个参数是模板
    # 第三个参数是上下文
    return render(request,"cur_time.html",{"time":ctime})

前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>当前时间:{{ time }}</h1>
</body>
</html>

2.  . ,通过.可以获取一个列表中的值

后台:

def template2(req):
    s1=[1,2,3]
    return render(req,"t2.html",{"list":s1})

前端(list.2 的意思是获取list 下标为2 的元素,结果是3 ):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>t2</title>
</head>
<body>
    <h1>template</h1>
{{ list.2 }}
</body>
</html>

获取字典中的值

后台:

def template3(req):
    s2={"name":"aa","age":20}
    return render(req,"t3.html",{"obj":s2})

前台(通过obj.name 获取name 的值,结果为aa):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>t3</title>
</head>
<body>
    <h1>template</h1>
{{ obj.name }}
</body>
</html>

获取一个对象的属性:

后台:

def template4(req):
    ctime = datetime.datetime.now()
    return render(req,"t4.html",{"ctime":ctime})

前端(获取当前时间的年的属性,结果是2018):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>t4</title>
</head>
<body>
    <h1>template</h1>
{{ ctime.year }}
</body>
</html>

3. 逻辑判断,循环

后台:

def template5(req):
    ctime = datetime.datetime.now()
    s2 = {"name", "aa", "age", 20}
    return render(req,"t5.html",{"ctime":ctime,"obj":s2})

前台:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>t5</title>
</head>
<body>
    <h1>template</h1>
{#    if语句的使用#}
{% if ctime%}
    <h1>if</h1>
{% elif 1%}
     <h1>elif</h1>>
{% endif %}

{% for foo in obj %}
{#    拿数据的索使用{{ forloop.counter }}#}
    <h1>{{ forloop.counter }}:{{foo}}</h1>

{% endfor %}



</body>
</html>

表单提交{% csrf_token %}

HTML 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>t7</title>
</head>
<body>
    <h1>template</h1>

    <form action="/t7/" method="post">
        <input type="text" name="user">
        <input type="text" name="pwd">
        <input type="submit" value="submit">
{#        当有 form表单提交的时候,Django会有跨站请求攻击的防护措施,配置在settings 的MIDDLEWARE  中:'django.middleware.csrf.CsrfViewMiddleware',#}
{#        为了可以让表单可以正常提交,又不注释settings文件,可以用下边的方法,添加 {% csrf_token %}#}
        {% csrf_token %}
    </form>
</body>
</html>

4.filter

后台:

def template6(req):
    s="heLLo"
    s6=6
    s1="<a href='#'>link</a>"
    return render(req,"t6.html",{"str":s,"sInt":s6,"s1":s1})

前台:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>t6</title>
</head>
<body>
    <h1>template</h1>
{#将str内容变成大写#}
{{ str|upper }}

{#    将str转成小写#}
{{ str|lower }}

{#首字母大写#}
{{ str|capfirst }}

{#    把sInt 的值加5#}
{{ sInt|add:5 }}

{#  在str前添加一个斜杠,一般str是路径的时候会这样处理#}

{{ str|addslashes}}

{#    把s1中的存储的标签字符串在界面中渲染#}
    {% autoescape off%}
    {{s1}}
    {% endautoescape %}

{#    把s1中的存储的标签字符串在界面中渲染第二种写法,推荐用这种方法#}
    {{ s1|safe }}

</body>
</html>

5.取消渲染

添加在 {% verbatim %}{% endverbatim %} 之间的代码不会被渲染,下边的例子显示为:{{name}}  , 而不是变量name的值

    {% verbatim %}
    {{ name }}
   {% endverbatim %}
原文地址:https://www.cnblogs.com/gaizhongfeng/p/9245506.html