Django 系列笔记是笔者学习、实践使用 Django 的相关笔记,大量参考了知了课堂的《Django零基础到项目实战》教程。
参考文档:
Django官方文档(英文)
Django 中文文档
配置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 的异常。
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')
# html 模板代码,profile.html
{{ username }}
# 视图函数代码
def view(request):
return render(request, 'profile.html',context={'username':'huangyong'})
if标签: if标签中可以使用==、!=、<、<=、>、>=、in、not in、is、is not等判断运算符。
{% if ..... %}
....
{% else %}
....
{% endif %}
for…in…标签: 可以遍历列表、元组、字符串、字典等一切可以遍历的对象
{% for ... in ... %}
{{ ... }}
{% endfor %}
**for…in…empty标签:**遍历的对象如果没有元素的情况下,会执行empty中的内容
{% for ... in ... %}
...
{% empty %}
...
{% endfor %}
with标签: 复杂的变量缓存到一个变量上
{% with 变量名=复杂的变量 %}
{{ 变量名 }}
{% endwith %}
url标签: url反转,通常用于 href 属性
...
# url反转,使用关键字参数
图书
通过滤器可以对数据进行处理,类似于函数
add 过滤器: 变量加上一个值
{{ name |add: 'value' }}
date 过滤器: 日期转化成指定格式的字符串
# 数据
context = {"birthday": datetime.now()}
# 转化成 2018-01-01 格式
{{ birthday|date:"Y-m-d" }}
length 过滤器: 获取一个列表/元组/字符串/字典的长度
{{ list|length }}
父模板:
Title
{# 开一个口,子模板中自定义 #}
{% block main %}{% endblock %}
{# 也可以写成下面这样,更明了 #}
{% block main %}{% endblock main %}
子模板:
# 指定继承与那个模板
{% extends "base.html" %}
# 选择父模板中开的口子,自定义内容
{% block main %}自定义内容{% endblock %}
在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件,js 执行文件以及图片等。因此在 DTL 中加载静态文件是一个必须要解决的问题。在 DTL 中,使用 static 标签来加载静态文件。要使用 static 标签格式 {% load static %}。
STATICFILES_DIRS = [
# 项目根目录下的 static 文件夹
os.path.join(BASE_DIR,"static")
]
{% load static %}
'builtins':['django.templatetags.static']
,这样以后在模版中就可以直接使用 static 标签,而不用手动 load。from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# 其他的url映射
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
GOOD LUCK!