zoukankan      html  css  js  c++  java
  • Django-模板引擎

    基本数据类型的渲染

    # views.py文件
    def test(request):
    
        name = 'nick'
        age = 18
        hobby = ['read','music','sing']
        info = {"name":'nick',"age":18,"hobby":['read','music','sing']}
        users = [{"name":'nick',"age":18},{'name':'egon',"age":20},{"name":"sean","age":19}]
    
        return render(request,'test.html',{'name':name,"age":age,"hobby":hobby,"info":info,"users":users})
    
    # test.html文件
    
    name:{{ name }}<br>  # 字符串类型渲染 
    age:{{ age }}<br>  # 数字类型渲染    
    # 列表类型渲染 
    <ul>
        <li>{{ hobby.0 }}</li>
        <li>{{ hobby.1 }}</li>
        <li>{{ hobby.2 }}</li>
    </ul>
    <ul>
        {% for item in hobby %}
            <li>{{ item }}</li>
        {% endfor %}
    
    </ul>
    # 字典类型渲染
    <ul>
        <li>{{ info.name }}</li>
        <li>{{ info.age }}</li>
        <li>{{ info.hobby }}</li>
    </ul>
    <ul>
        {% for item in info.keys %}
            <li>{{ item }}</li>
        {% endfor %}
    </ul>
    <ul>
        {% for item in info.values %}
            <li>{{ item }}</li>
        {% endfor %}
    </ul>
    <ul>
        {% for key,val in info.items %}
            <li>{{ key }}:{{ val }}</li>
        {% endfor %}
    </ul>
    # 列表套字典
    {% for user in users %}
        {{ user.name }}
    {% endfor %}
    

    母版与子版

    ​ 在开发过程中,将每个页面都有样式写在一个母版里,在子版中继承使用

    # 母版loyout.html
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        {% block mycss %}
    
        {% endblock %}
    </head>
    <body>
    {% block mycontent %}
    
    {% endblock %}
    </body>
    {% block myjs %}
    
    {% endblock %}
    </html>
    
    
    # 子版test.html
    {% extends 'loyout.html' %}
    
    {% block mycss %}
    子版自定制的样式
    {% endblock %}
    
    {% block mycontent %}
    子版自定制的内容
    {% endblock %}
    
    {% block myjs %}
    子版自定制的js
    {% endblock %}
    

    导入模块

    在python中可以将功能写成一个模块,在多个py文件中用import导入;同理,在django中也可以将好的页面或组件写成模块,在多个文件中用include导入使用.如

    # test.html模块文件
    <form action="" method="post">
        用户名:<input type="text">
        密码:<input type="password">
        <input type="submit" value="提交">
    </form>
    
    # 在test1.html中导入test.html中的模块
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>test</title>
    </head>
    <body>
    {% include 'test.html' %}
    {% include 'test.html' %}
    {% include 'test.html' %}
    {% include 'test.html' %}
    </body>
    </html>
    

    与python导入模块不同,在python中只能导入一次,在django中可以导入多次,导入几次就显示几个

    内置函数

    # name是后端返回的字符串
    {{ name|upper }}  {# 大写 #}
    {{ name|lower }}  {# 大写 #}
    {{ name|first|upper }}  {# 取首字母,变大写 #}
    {{ name|truncatewords:"2"}}  {# 取name中前两个单词#}
    

    自定义函数

    步骤一:在app中创建templatetags目录

    步骤二:在templatetags目录中创建任意.py文件,如user.py,在文件中自定义函数

    from django import template
    
    register = template.Library()
    
    @register.filter
    def my_filter(val, args):
    	return val + args
    
    @register.simple_tag
    def my_upper(val, args, args1):
    	return val + args + args1
    

    步骤三:在html中调用函数

    {%load user %}
    				
    {# simple_filter #}
    {{name | my_filter:'xxx'}}
    
    {# simple_tag #}
    {%my_upper "zekai" "sss" 'dsadsadsa'%}
    

    filter函数只能传入两个参数,simple_filter函数可以传多个参数

  • 相关阅读:
    显示Unicode 字节的对应字符的小技巧
    apktool 打包解包apk的总结
    Android Studio下载新的AVD映像把C盘给占满了
    微信开发记录
    node.js版本升级
    Cordova+FrameWork7开发简单教程
    centos安装 Falcon+
    centos7安装 go
    bash: /home/aprilpeng/.bashrc: Permission denied
    git push问题 objects/pack/tmp_pack_XXXXXX': Permission denied
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11366165.html
Copyright © 2011-2022 走看看