Django Template层之Template概述
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模板
<!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概述的更多相关文章
- 63、django之模版层(template)
上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...
- django之模版层(template)
上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 本篇导论: 模版简介 模版之变量 模版之 ...
- Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...
- 模型层(template)
错误之forbbiddon csrf_token:这个标签用于跨站请求伪造保护 提交数据的时候就会做安全机制,当你点击提交的时候会出现一个forbbiddon 的错误,就是用setting配置里的sc ...
- django模板语言之Template
当前端的一些数据需要后端传送过来并展示时,用到了django的模板语言,模板语言的作用就是,在后端把一些处理好的数据,通过模板语言所规定的格式,通过render渲染,放到前端页面固定的位置展示.这之间 ...
- django notes 三:Template 的查找
django 中有 2种 Template Loader django.template.loaders.filesystem.Loader django.template.loaders.app_d ...
- django——模板层
每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...
- Django模板层
一:模板简介 二:模板语法值变量 三: 模板之过滤器 四: 模板之标签 五:自定义标签和过滤器 一:模板简介 def current_datetime(request): now=datetime ...
- Django 视图层和模板层
目录 一.网站首页和404页面的路由配置 1. 网站首页路由 2. 404页面 二.Django视图层 1. 小白必会三板斧 (1)HttpResponse (2)render (3)redirect ...
- Django模板层学习笔记
一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...
随机推荐
- 【ESP32】制作 Wi-fi 音箱(HTTP + I2S 协议)
用 Wifi 来传输音频数据,会比蓝牙更好.使用蓝牙方式,不管你用什么协议,都会对数据重新编码,说人话就是有损音质,虽然不至于全损.而使用 Wifi 就可以将 PCM 数据直接传输,无需再编码和压缩. ...
- 解密Prompt系列30. LLM Agent之互联网冲浪智能体
这一章我们介绍能自主浏览操作网页的WebAgent们和相关的评估数据集,包含初级任务MiniWoB++,高级任务MIND2WEB,可交互任务WEBARENA,多模态WebVoyager,多轮对话Web ...
- Android 12(S) MultiMedia Learning(三)MediaPlayer Native
上一篇MediaPlayer中看到实现一个最简单的播放器只需要5个接口,接下来会看看这些接口实现内容 /************************************************ ...
- 机器学习策略篇:详解进行误差分析(Carrying out error analysis)
从一个例子开始讲吧. 假设正在调试猫分类器,然后取得了90%准确率,相当于10%错误,,开发集上做到这样,这离希望的目标还有很远.也许的队员看了一下算法分类出错的例子,注意到算法将一些狗分类为猫,看看 ...
- Ubuntu 上使能 SELinux
首发公号:Rand_cs 此文档说明如何在 ubuntu 上启用 SELinux,测试环境为虚拟机,开始前一定一定一定先来个快照,不要问我为什么有三个一定. 卸载 apparmor(可选) ubunt ...
- FTP传输PORT、PASV模式
FTP FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件.相比于HTTP,FTP协议要复杂得多.复杂的原因,是因为FTP协议要用到两个TCP ...
- kubernetes安装Prometheus
安装 在目标集群上,执行如下命令: kubectl apply -f https://github.com/512team/dhorse/raw/main/conf/kubernetes-promet ...
- 算法金 | A - Z,115 个数据科学 机器学习 江湖黑话(全面)
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 机器学习本质上和数据科学一样都是依赖概率统计,今天整整那些听起来让人头大的机器学习江湖 ...
- 上交大开源镜像站下架 Docker Hub 镜像
在现代软件开发中,Docker镜像已经成为不可或缺的工具.然而,最近频频出现的Docker镜像下架事件让许多开发者措手不及.突然失去依赖的镜像,不仅打乱了项目进程,还引发了许多不便.那么,面对Do ...
- Linux 内核:设备驱动模型 学习总结
背景 其实之前就转载过别人针对Linux的设备驱动模型(Linux Device Driver Model,LDDM)的文章,但是受限于自身的能力,因此花了点时间重新学习了一下. 前人写的文章很好,我 ...