• Django Template层之Template概述


    Django Template层之Template概述

    by:授客 QQ1033553122

     

    实践环境

    Python版本:python-3.4.0.amd64

    下载地址:https://www.python.org/downloads/release/python-340/

     

     

    Win7 64位

     

    Django  1.11.4

    下载地址:https://www.djangoproject.com/download/

     

     

    模板引擎支持

    配置

    通过settings.py中的TEMPLATES 配置模板引擎。TEMPLATES配置为一个list列表,每个列表代表一个引擎,默认值为空list。以下为自动生成的配置:

    TEMPLATES = [

        {

            'BACKEND': 'django.template.backends.django.DjangoTemplates',

            'DIRS': [],

            'APP_DIRS': True,

            'OPTIONS': {

                # ... some options here ...

            },

        },

    ]

     

    说明:

    BACKEND 点分python path,指定django模板backend api的模板引擎类。内置的backend引擎为django.template.backends.django.DjangoTemplates 和 django.template.backends.jinja2.jinja2

     

    DIRS 定义引擎查找模板源文件的目录

    APP_DIRS 告诉引擎是在已安装应用内部查找模板,每个backend在应用内部,按约定名称定义了用于存储模板一个目录。

     

    OPTIONS 包含backend具体的配置

     

    用法(Usage)

     

     

    Built-in backends

     

    Custom backends

     

    Debug integration for custom engines

     

    Django模板语言

    变量(Variables)

    变量输出来自context的值,context-类似字典的对象

    变量采用{{ }} 包围,例子:

     

    html模板

    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
        {% load staticfiles %}
     
    </head>
    <body>
     
    <div>
    My first name is {{ first_name }}. My last name is {{ last_name }}.
    </div>
     
     
    </body>
    </html>

     

     

    视图

    #-*- encoding:utf-8 -*-
     
    __author__ = 'shouke'
     
    from django.shortcuts import render
    # Create your views here.
     
     
    def test_page(request):
        return render(request, 'website/pages/mytest.html',{'first_name': 'John', 'last_name': 'Doe'})

     

     

    渲染结果为

     

     

    支持字典查找,对象属性查找,list索引查找:

    {{ my_dict.key }}

    {{ my_object.attribute }}

    {{ my_list.0 }}

     

    例子:上述render函数代码如果修改为以下

    return render(request, 'website/pages/mytest.html',{'name':{'first_name': 'John', 'last_name': 'Doe'}})
     
    则可在html模板中这样引用 {{ name.first_name }}

     

     

    如果变量解析为一个可调用对象,那么模板系统将不带参数调用该可调用对象,并使用其返还结果。

     

    标签(Tags)

    标签用于在渲染过程中提供灵活的逻辑处理(arbitrary logic)
     
    标签应该使用 {% %} 包围,形如
    {% csrf_token %}

     

    大部分标签都可以接收参数

    {% cycle 'odd' 'even' %}

     

    引用urls.py中的指定url

    {% url app_name:url_name%}

     

    一些tag要求有开始标签和结束标签

    {% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}

     

     

    一些例子:

    1:根据用户是否登录展示不同的内容
    {% if user.is_authenticated %}
    <p>你已登录,欢迎你:<a href="#">{{ user.username }}</a></p>
    {% else %}
    <p>你还没有登录,请
        <button><a href="#">登录</a></button>
        或者
        <button><a href="#">注册</a></button>
    </p>
    {% endif %}

     

    {% if athlete_list %}

        Number of athletes: {{ athlete_list|length }}

    {% elif athlete_in_locker_room_list %}

        Athletes should be out of the locker room soon!

    {% else %}

        No athletes.

    {% endif %}

     

    <ul>

    {% for athlete in athlete_list %}

        <li>{{ athlete.name }}</li>

    {% endfor %}

    </ul>

     

     

    2:基于名称空间和url命名,在html模板中引用urls.py中的指定url

    app应用的urls.py配置如下

    __author__ = 'shouke'

     

    from django.conf.urls import url

     

    from . import views

    from . import register_views

    from . import login_out_views

    from . import change_pwd_views

     

    app_name = 'website'

     

    urlpatterns = [

    ……,

        url(r' ^platform/ pages/home.html$'', views.home, name='home_url'),

    ……,

    ]

     

     

    <li class="active" id="defaultMenu"><a href="{% url 'website:home_url' %}">首页</a></li>

     

    程序运行时,这里的

    <a href="{% url 'website:home_url' %}

    将被替换为

    <a href="/platform/ pages/home.html"}

     

    参考链接:https://docs.djangoproject.com/en/2.1/ref/templates/language/#tags

     

    for循环遍历list

    view视图

     
    #-*- encoding:utf-8 -*-


    __author__ = 'shouke'

    from django.shortcuts import render

    # Create your views here.

    def test_page(request):
       
    return render(request, 'website/pages/mytest.html',{'result':['html', 'js', 'csss']})


     

    html模板

    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
        {% load staticfiles %}

    </head>
    <body>
    {% for value in result %}
            <p>{{ value }}</p>
    {% endfor %}


    </body>
    </html>

     

    运行结果:

     

     

    html模板中使用引用会话信息

     

    {% for key,value in request.session.items %}
        {% ifequal 'username' key %}
            username is {{ value }}
        {% endifequal %}
    {% endfor %}

     

     

    过滤器(Filters)

     

    注释(Comments)

    单行注释

    html模板中使用单行注释,形如以下:

     

    {# this won't be rendered #}

     

    多行注释

    使用 comment tag实现多行注释

    <body>

    {% comment %}

    <div>

    My first name is {{ first_name }}. My last name is {{ last_name }}.

    </div>

    {% endcomment %}

    </body>

     

    >>> all_entries = Person.objects.all()

    >>> all_entries

    <QuerySet [<Person: Person object>]>

     

    说明:

    all()方法会返回数据库表中所有记录的结果集,等同于以下sql SELECT 语句

    SELECT * FROM `myapp_person`

     

    组件(Commponents)

     

    参考链接:

    https://docs.djangoproject.com/en/2.1/topics/templates

     

  • 相关阅读:
    Navicat 连接MySQL 8.0.11 出现2059错误
    安全技术运营的心得
    浅谈命令混淆
    2021年度总结与2022新的展望
    域环境搭建之安装exchange
    内网ADCS攻防
    CVE202142287复现
    企业安全建设——安全防线框架建设(一)
    frp_v0.37.1内网穿透,内网服务公网用不求人
    WP7XNA 多点触摸
  • 原文地址:https://www.cnblogs.com/shouke/p/13296300.html
Copyright © 2020-2023  润新知