zoukankan      html  css  js  c++  java
  • 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 %}
  • 相关阅读:
    CVE-2019-16278:Nostromo Web服务器的远程命令执行
    内网渗透一(信息收集)
    Apache Flink 任意jar包上传漏洞
    Apache ---- Solrl漏洞复现
    linux内核过高导致vm打开出错修复脚本
    lvm拓展
    文件时间进度扫描控制,可回溯,空闲扫描,系统时间调整不影响
    Raid 管理
    curl 工具使用
    docker 入门
  • 原文地址:https://www.cnblogs.com/gaizhongfeng/p/9245506.html
Copyright © 2011-2022 走看看