前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django Template层之Template概述

Django Template层之Template概述

作者头像
授客
发布2020-07-16 16:29:36
8570
发布2020-07-16 16:29:36
举报
文章被收录于专栏:授客的专栏授客的专栏

Django Template层之Template概述

by:授客 QQ:1033553122

实践环境

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模板

代码语言:javascript
复制
<!DOCTYPE html>
代码语言:javascript
复制
<html lang="zh-cn">
代码语言:javascript
复制
<head>
代码语言:javascript
复制
    {% load staticfiles %}
代码语言:javascript
复制
代码语言:javascript
复制
</head>
代码语言:javascript
复制
<body>
代码语言:javascript
复制
代码语言:javascript
复制
<div>
代码语言:javascript
复制
My first name is {{ first_name }}. My last name is {{ last_name }}.
代码语言:javascript
复制
</div>
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
</body>
代码语言:javascript
复制
</html>

视图

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

渲染结果为

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

{{ my_dict.key }}

{{ my_object.attribute }}

{{ my_list.0 }}

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

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

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

标签(Tags)

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

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

{% cycle 'odd' 'even' %}

引用urls.py中的指定url

{% url app_name:url_name%}

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

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

一些例子:

代码语言:javascript
复制
例1:根据用户是否登录展示不同的内容
代码语言:javascript
复制
{% if user.is_authenticated %}
代码语言:javascript
复制
<p>你已登录,欢迎你:<a href="#">{{ user.username }}</a></p>
代码语言:javascript
复制
{% else %}
代码语言:javascript
复制
<p>你还没有登录,请
代码语言:javascript
复制
    <button><a href="#">登录</a></button>
代码语言:javascript
复制
    或者
代码语言:javascript
复制
    <button><a href="#">注册</a></button>
代码语言:javascript
复制
</p>
代码语言:javascript
复制
{% 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视图

代码语言:javascript
复制
代码语言:javascript
复制
#-*- 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']})
代码语言:javascript
复制

html模板

代码语言:javascript
复制
<!DOCTYPE html>

<html lang="zh-cn">

<head>

    {% load staticfiles %}



</head>

<body>

{% for value in result %}

        <p>{{ value }}</p>

{% endfor %}





</body>

</html>

运行结果:

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

代码语言:javascript
复制
{% for key,value in request.session.items %}
代码语言:javascript
复制
    {% ifequal 'username' key %}
代码语言:javascript
复制
        username is {{ value }}
代码语言:javascript
复制
    {% endifequal %}
代码语言:javascript
复制
{% 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档