Django 笔记4 -- 模板
Django 笔记4 – 模板
Django 系列笔记是笔者学习、实践使用 Django 的相关笔记,大量参考了知了课堂的《Django零基础到项目实战》教程。
参考文档:
Django官方文档(英文)
Django 中文文档
一、模板
1、模板查找路径配置
配置TEMPLATES:
项目的settings.py文件中,有一个 TEMPLATES 配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]
DIRS: 一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用 render 或者 render_to_string 渲染模板的时候,会在这个列表的路径中查找模板。
APP_DIRS: 默认为True,这个设置为True后,会在 INSTALLED_APPS 的安装了的APP下的 templates 目录中查找模板。
查找顺序: 查找一个模板,先在 DIRS 这个列表中依次查找路径下有没有这个模板,如果有,就返回。如果DIRS列表中所有的路径都没有找到,那么会先检查当前这个视图所处的 app 是否已经安装,如果已经安装了,那么就先在当前这个 app 下的 templates 文件夹中查找模板,如果没有找到,那么会在其他已经安装了的 app 中查找。如果所有路径下都没有找到,那么会抛出一个 TemplateDoesNotExist 的异常。
2、渲染模板
render_to_string():
from django.template.loader import render_to_string
from django.http import HttpResponse# 将模板编译后渲染成Python的字符串格式后,再包装成HttpResponse对象
html = render_to_string("detail.html")
return HttpResponse(html)
render():
from django.shortcuts import render# 直接将模板渲染成字符串并包装成HttpResponse对象
return render(request,'list.html')
二、DTL 模板
1、变量
- Django 在渲染模板的时候,可以传递变量对应的值过去进行替换。变量的命名规范和 Python 非常类似,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。变量需要通过视图函数渲染,视图函数在使用 render 或者render_to_string 的时候可以传递一个 context 的参数,这个参数是一个字典类型。以后在模板中的变量就从这个字典中读取值的。
- 模板中使用变量,格式:{{ key }}
- key 是一个字典,通过 key.key 得到 key 这个字典的键对应的值
- key 是一个对象,通过 key.xx 得到 key 这个对象的 xx 属性/方法。
- key 是一个列表/元组,通过 key.1,得到 key 这个列表/元组的第1个值
- 如果 key 中没有指定的东西,返回一个空的字符串
# html 模板代码,profile.html
<p>{{ username }}</p># 视图函数代码
def view(request):return render(request, 'profile.html',context={'username':'huangyong'})
2、模板标签
if标签: if标签中可以使用==、!=、<、<=、>、>=、in、not in、is、is not等判断运算符。
{% if ..... %}<p> .... </p>{% else %}<p> .... </p>{% endif %}
for…in…标签: 可以遍历列表、元组、字符串、字典等一切可以遍历的对象
- forloop.counter:当前循环的下标,以1作为起始值。
- forloop.counter0:当前循环的下标,以0作为起始值。
- forloop.first:是否是第一次遍历。
- forloop.last:是否是最后一次遍历。
{% for ... in ... %}<p>{{ ... }}</p>{% endfor %}
**for…in…empty标签:**遍历的对象如果没有元素的情况下,会执行empty中的内容
{% for ... in ... %}...{% empty %}...{% endfor %}
with标签: 复杂的变量缓存到一个变量上
{% with 变量名=复杂的变量 %}<p>{{ 变量名 }}</p>{% endwith %}
url标签: url反转,通常用于 href 属性
<a href="{% url '视图函数' %}"> ... </a># url反转,使用关键字参数
<a href="{% url '视图函数' key=value %}">图书
3、模版过滤器
通过滤器可以对数据进行处理,类似于函数
add 过滤器: 变量加上一个值
{{ name |add: 'value' }}
date 过滤器: 日期转化成指定格式的字符串
# 数据
context = {"birthday": datetime.now()}# 转化成 2018-01-01 格式
{{ birthday|date:"Y-m-d" }}
length 过滤器: 获取一个列表/元组/字符串/字典的长度
{{ list|length }}
4、模板继承
父模板:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{# 开一个口,子模板中自定义 #}{% block main %}{% endblock %}{# 也可以写成下面这样,更明了 #}{% block main %}{% endblock main %}
</body>
</html>
子模板:
# 指定继承与那个模板
{% extends "base.html" %}# 选择父模板中开的口子,自定义内容
{% block main %}自定义内容{% endblock %}
三、加载静态文件
1、静态文件
在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件,js 执行文件以及图片等。因此在 DTL 中加载静态文件是一个必须要解决的问题。在 DTL 中,使用 static 标签来加载静态文件。要使用 static 标签格式 {% load static %}。
2、静态文件路径配置
- 首先确保 django.contrib.staticfiles 已经添加到settings.INSTALLED_APPS中。
- 确保在settings.py中设置了STATIC_URL。
- 在已经安装了的 app 下创建一个文件夹叫做 static,然后再在这个 static 文件夹下创建一个当前app的名字的文件夹,再把静态文件放到这个文件夹下(如果直接把静态文件放在 static 文件夹下,在多个 app 之间有同名的静态文件时可能就会产生混淆)。
- 如果有一些静态文件是不和任何app挂钩的。那么可以在 settings.py 中添加 STATICFILES_DIRS,以后 DTL 就会在这个列表的路径中查找静态文件。
STATICFILES_DIRS = [# 项目根目录下的 static 文件夹os.path.join(BASE_DIR,"static")]
- 在模版中使用 load 标签加载 static 标签,就可以直接使用 static 文件夹下的静态文件。
{% load static %}<link rel="stylesheet" href="{% static 'style.css' %}">
- 如果不想每次在模版中加载静态文件都使用 load 加载 static 标签,那么可以在 settings.py 中的 TEMPLATES.OPTIONS中 添加
'builtins':['django.templatetags.static']
,这样以后在模版中就可以直接使用 static 标签,而不用手动 load。 - 如果没有在 settings.INSTALLED_APPS 中添加 django.contrib.staticfiles。那么我们就需要手动的将请求静态文件的 url 与静态文件的路径进行映射了。
from django.conf import settings from django.conf.urls.static import staticurlpatterns = [# 其他的url映射 ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
GOOD LUCK!
Django 笔记4 -- 模板相关推荐
- Django 笔记2 -- Django 项目
Django 笔记2 – Django 入门 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: ...
- Django笔记-5-视图
2019独角兽企业重金招聘Python工程师标准>>> Django笔记-5-视图 概述 作用 视图接受web请求, 并相应web请求; 本质 视图就是一个Python中的函数 相应 ...
- Django笔记总结
1.web框架的本质 web通信流程 web我们这里指的就是通过浏览器去访问服务端,请求页面或者数据的通信方式,属于B/S架构.就是我们常见的网站.浏览器与服务端的通信流程:浏览器客户端发送一个请求信 ...
- 第三百一十节,Django框架,模板语言
第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...
- Python-OpenCV 笔记9 -- 模板匹配
Python-OpenCV 笔记9 – 模板匹配 1.模板匹配:matchTemplate() 函数原型: matchTemplate(image, templ, method[, result[, ...
- Django 笔记6 -- 多表查询
Django 笔记6 – 多表查询 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...
- Django 笔记5 -- 数据库
Django 笔记5 – 数据库 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...
- Django 笔记3 -- URL
Django 笔记3 – URL Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...
- Django 笔记1 -- 环境搭建
Django 笔记1 – 环境搭建 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...
最新文章
- jupyter notebook 进阶使用:nbextensions
- swoole基础01
- 为PHP安装Memcached扩展连接Memcached
- 太阳光是平行光吗_阳光照耀,万物生长——神奇的太阳光,到底是什么?
- QQ尾巴病毒的Visual C++实现探讨
- c语言银行系统个人心得,c,,银行管理实验报告心得体会.docx
- 编译运行BSR/bench源码
- 什么格式的照片可以是透明的
- C# BackgroundWorker组件学习
- 有效利用1 on 1
- sqlserver200864位下载_Microsoft SQL Server 2008 R2 官方简体中文正式版下载
- 电脑如何分盘win10_Win10电脑如何刻录光盘?利用win10自带刻录工具来刻录DVD光盘教程...
- outlook邮箱显示一直启动中_Outlook发送邮件一直停留在发件箱的解决办法
- 熊猫数据集_使用大数据的熊猫
- python动态监控日志内容
- 免费edu邮箱申请注冊地址
- 2023年河北医科大学临床检验诊断学考研分享
- 单点登录 统一用户管理
- NOI-1.2(05) 填空:类型转换2
- 流水车间调度问题混合整数规划模型