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、静态文件路径配置

  1. 首先确保 django.contrib.staticfiles 已经添加到settings.INSTALLED_APPS中。
  2. 确保在settings.py中设置了STATIC_URL。
  3. 在已经安装了的 app 下创建一个文件夹叫做 static,然后再在这个 static 文件夹下创建一个当前app的名字的文件夹,再把静态文件放到这个文件夹下(如果直接把静态文件放在 static 文件夹下,在多个 app 之间有同名的静态文件时可能就会产生混淆)。
  4. 如果有一些静态文件是不和任何app挂钩的。那么可以在 settings.py 中添加 STATICFILES_DIRS,以后 DTL 就会在这个列表的路径中查找静态文件。
     STATICFILES_DIRS = [# 项目根目录下的 static 文件夹os.path.join(BASE_DIR,"static")]
    
  5. 在模版中使用 load 标签加载 static 标签,就可以直接使用 static 文件夹下的静态文件。
     {% load static %}<link rel="stylesheet" href="{% static 'style.css' %}">
    
  6. 如果不想每次在模版中加载静态文件都使用 load 加载 static 标签,那么可以在 settings.py 中的 TEMPLATES.OPTIONS中 添加'builtins':['django.templatetags.static'],这样以后在模版中就可以直接使用 static 标签,而不用手动 load。
  7. 如果没有在 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 -- 模板相关推荐

  1. Django 笔记2 -- Django 项目

    Django 笔记2 – Django 入门 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: ...

  2. Django笔记-5-视图

    2019独角兽企业重金招聘Python工程师标准>>> Django笔记-5-视图 概述 作用 视图接受web请求, 并相应web请求; 本质 视图就是一个Python中的函数 相应 ...

  3. Django笔记总结

    1.web框架的本质 web通信流程 web我们这里指的就是通过浏览器去访问服务端,请求页面或者数据的通信方式,属于B/S架构.就是我们常见的网站.浏览器与服务端的通信流程:浏览器客户端发送一个请求信 ...

  4. 第三百一十节,Django框架,模板语言

    第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...

  5. Python-OpenCV 笔记9 -- 模板匹配

    Python-OpenCV 笔记9 – 模板匹配 1.模板匹配:matchTemplate() 函数原型: matchTemplate(image, templ, method[, result[, ...

  6. Django 笔记6 -- 多表查询

    Django 笔记6 – 多表查询 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

  7. Django 笔记5 -- 数据库

    Django 笔记5 – 数据库 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...

  8. Django 笔记3 -- URL

    Django 笔记3 – URL Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django ...

  9. Django 笔记1 -- 环境搭建

    Django 笔记1 – 环境搭建 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Djang ...

最新文章

  1. jupyter notebook 进阶使用:nbextensions
  2. swoole基础01
  3. 为PHP安装Memcached扩展连接Memcached
  4. 太阳光是平行光吗_阳光照耀,万物生长——神奇的太阳光,到底是什么?
  5. QQ尾巴病毒的Visual C++实现探讨
  6. c语言银行系统个人心得,c,,银行管理实验报告心得体会.docx
  7. 编译运行BSR/bench源码
  8. 什么格式的照片可以是透明的
  9. C# BackgroundWorker组件学习
  10. 有效利用1 on 1
  11. sqlserver200864位下载_Microsoft SQL Server 2008 R2 官方简体中文正式版下载
  12. 电脑如何分盘win10_Win10电脑如何刻录光盘?利用win10自带刻录工具来刻录DVD光盘教程...
  13. outlook邮箱显示一直启动中_Outlook发送邮件一直停留在发件箱的解决办法
  14. 熊猫数据集_使用大数据的熊猫
  15. python动态监控日志内容
  16. 免费edu邮箱申请注冊地址
  17. 2023年河北医科大学临床检验诊断学考研分享
  18. 单点登录 统一用户管理
  19. NOI-1.2(05) 填空:类型转换2
  20. 流水车间调度问题混合整数规划模型

热门文章

  1. 基于Hadoop生态技术构建阿里搜索离线系统
  2. Spring mvc 注解@ResponseBody 返回内容编码问题
  3. OEM status|start|stop
  4. C#设计模式(1)——单例模式
  5. android四中启动模式
  6. android 6.0动态权限的申请
  7. 24-单调递增最长子序列(多种解法总结)
  8. 数组中子数组求最大和
  9. Django 权限管理
  10. css中padding和magin的区别