1. 语法
1. 变量 (variables)
- 模板中的变量一般使用双括号 {{ }} 包围
- 使用 . 获取一个变量(字典、对象和列表)的属性
{{ my_dict.key }}
{{ my_object.attribute }}
{{ my_list.0 }}
2. 标签 (tags)
{% block content %} 代码块 {% endblock %}
{% csrf_token %} 表单专用
<ul>
{% for athlete in athlete_list %}
<li>{{ forloop.counter }} - {{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes。</li>
{% endfor %}
</ul>
{% if title == "python" %}
Say python.
{% elif title == "django"}
Say django.
{% elif title == "django"}
Say django.
{% else %}
Say java.
{% endif %}
{% url 'blog:article_detail' article.id %}
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
{% load sometags_library %}
{% include "header.html" %}
{% include "base.html" %}
{% now "jS F Y H:i" %}
3. 过滤器 (filters)
- 过滤器可以改变变量在模板中的显示形式
- 比如 {{ article.title | lower }} 中lower过滤器可以让文章的标题转化为小写
过滤器 | 例子 | 作用 |
---|
lower, upper | {{ article.title | lower }} | 大小写 |
length | {{ name | length }} | 长度 |
default | {{ value | default: “0” }} | 默认值 |
date | {{ picture.date | date:”Y-m-j “ }} | 日期格式 |
dicsort | {{ value | dicsort: “name” }} | 字典排序 |
escape | {{ title | escape }} | 转义 |
filesizeformat | {{ file | filesizeformat }} | 文件大小 |
first, last | {{ list | first }} | 首或尾 |
floatformat | {{ value | floatformat }} | 浮点格式 |
get_digit | {{ value | get_digit }} | 位数 |
join | {{ list | join: “,” }} | 字符连接 |
make_list | {{ value | make_list }} | 转字符串 |
pluralize | {{ number | pluralize }} | 复数 |
random | {{ list | random }} | 随机 |
slice | {{ list | slice: “:2” }} | 切片 |
slugify | {{ title | slugify }} | 转为slug |
striptags | {{ body | striptags }} | 去除tags |
time | {{ value | time: “H:i” }} | 时间格式 |
timesince | {{ pub_date | timesince: given_date }} | |
truncatechars | {{ title | truncatechars: 10 }} | |
truncatewords | {{ title | truncatewords: 2 }} | |
truncatechars_html | {{ title | truncatechars_html: 2 }} | |
urlencode | {{ path | urlencode }} | URL转义 |
wordcount | {{ body | wordcount }} | 单词字数 |
2. 加载
1. 模板文件路径
- 项目(project)模板,一般是项目根目录下的templates文件夹
- 应用(app)模板,一般是app目录下的app/templates/app文件夹
myproject/
manage.py
myproject/
blog/
__init__.py
models.py
managers.py
views.py
urls.py
templates/
blog/
base.html
list.html
detail.html
templates/
base.html
index.html
- 对于上面这种规范的项目布局,在使用render方法指定渲染模板时,无需给出完整的路径,只需给出相对于templates的路径即可
return render(request, "index.html", { "msg": "hello world!",})
return render(request, "blog/list.html", { "articles": articles,})
2. 模板的继承
- 使用extends标签用于模板继承
- 可以重写同名模块
{% extends "base.html" %}
{% block content %}
{{ some code }}
{% endblock }
3. 加载静态文件(css, js)
- 静态文件属于整个项目project
STATIC_URL = '/static/'
- 静态文件属于各个app
STATIC_URL = '/static/'
- 模板中引用
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %} Django Web Applications {% endblock %} </title>
<link rel="stylesheet" href="{% static 'app/custom.css' %}">
<script type='text/javascript' src="{% static 'app/main.js' %}"></script>
- 首先得载入 static 标签,并且放在html的头部位置
- 如果 extends 标签和 load 同时存在,extends 需要放在最上面,然后再放 load 等标签