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

Django Template层之Template概述的更多相关文章

  1. 63、django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...

  2. django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 本篇导论: 模版简介 模版之变量 模版之 ...

  3. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

  4. 模型层(template)

    错误之forbbiddon csrf_token:这个标签用于跨站请求伪造保护 提交数据的时候就会做安全机制,当你点击提交的时候会出现一个forbbiddon 的错误,就是用setting配置里的sc ...

  5. django模板语言之Template

    当前端的一些数据需要后端传送过来并展示时,用到了django的模板语言,模板语言的作用就是,在后端把一些处理好的数据,通过模板语言所规定的格式,通过render渲染,放到前端页面固定的位置展示.这之间 ...

  6. django notes 三:Template 的查找

    django 中有 2种 Template Loader django.template.loaders.filesystem.Loader django.template.loaders.app_d ...

  7. django——模板层

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  8. Django模板层

    一:模板简介 二:模板语法值变量 三: 模板之过滤器 四: 模板之标签 五:自定义标签和过滤器   一:模板简介 def current_datetime(request): now=datetime ...

  9. Django 视图层和模板层

    目录 一.网站首页和404页面的路由配置 1. 网站首页路由 2. 404页面 二.Django视图层 1. 小白必会三板斧 (1)HttpResponse (2)render (3)redirect ...

  10. Django模板层学习笔记

    一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...

随机推荐

  1. Git三大区域

    1.工作区 2.暂存区 3.版本库

  2. nginx aio模块添加与配置

    1. 升级目的 让现有服务平滑过渡到高版本,减少服务漏洞,提高服务性能 让其支持nginx最新特性 nginx threads模块 2. 获取nginx1.7.2版本 wget http://ngin ...

  3. 滴滴面试:谈谈你对Netty线程模型的理解?

    Netty 线程模型是指 Netty 框架为了提供高性能.高并发的网络通信,而设计的管理和利用线程的策略和机制. Netty 线程模型被称为 Reactor(响应式)模型/模式,它是基于 NIO 多路 ...

  4. (性能测试)--记录一次高可用场景导致CPU资源升高

    测试场景:高可用场景--限流测试: 被测交易:查询类交易,HTTP协议: 交易链路:jmeter - web - coimpre(前置服务) -- coimbp -- cobp (coimbp .co ...

  5. react 属性绑定动态值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Redis数据类型有哪些?

    a.String(字符串) b.Hash(hash表) c.List(链表) d.Set(集合) e.SortedSet(有序集合zset)

  7. 『手撕Vue-CLI』自动安装依赖

    开篇 经过『手撕Vue-CLI』拷贝模板,实现了自动下载并复制指定模板到目标目录.然而,虽然项目已复制,但其依赖并未自动安装,可能需要用户手动操作,这并不够智能. 正如前文所述,我们已经了解了业务需求 ...

  8. ssm框架使springmvc放行资源(java配置类)

    在springmvc中,如果配置了拦截所有请求交给springmvc处理,会出现一些静态web资源加载不出来的情况,或者想放行指定web资源可以通过修改通过修改配置达到相应目的,这里使用覆写WebMv ...

  9. .NET使用CsvHelper快速读取和写入CSV文件

    前言 在日常开发中使用CSV文件进行数据导入和导出.数据交换是非常常见的需求,今天我们来讲讲在.NET中如何使用CsvHelper这个开源库快速实现CSV文件读取和写入. CsvHelper类库介绍 ...

  10. 日常Bug排查-改表时读数据不一致

    前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 线上连续两天出现NP异常,而且都是凌晨低峰期才出现,在凌晨的流量远没有白天高 ...