From b63edf46f8ac076671eadf7cc987977d58c5cc83 Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Tue, 1 Nov 2022 22:24:45 +0800
Subject: [PATCH] doc: update `djiango.md` (#16)
---
docs/djiango.md | 329 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 328 insertions(+), 1 deletion(-)
diff --git a/docs/djiango.md b/docs/djiango.md
index 2cb3d79a..a66a161b 100644
--- a/docs/djiango.md
+++ b/docs/djiango.md
@@ -1,7 +1,7 @@
Django 备忘清单
===
-Django 是 Python 的一款 Web 框架
+Django 是 Python 的一款 Web 框架,本备忘单旨在快速理解 [Django](https://www.djangoproject.com/) 所涉及的主要概念,提供了最常用的 API 示例参考
入门
----
@@ -300,6 +300,333 @@ CREATE TABLE "members_members" (
);
```
+Django 模板
+---
+
+### 模板变量
+
+
+```django
+
+
你好 {{ firstname }},你好吗?
+```
+
+在视图 (`views.py`) 中创建变量,上面示例中的变量 `firstname` 通过视图发送到模板:
+
+```py
+from django.http import HttpResponse
+from django.template import loader
+
+def testing(request):
+ template = loader.get_template('template.html')
+ context = {
+ 'firstname': '狂徒张三',
+ }
+ return HttpResponse(template.render(context, request))
+```
+
+### 模板中创建变量
+
+```django
+{% with firstname="Tobias" %}
+你好 {{ firstname }},你好吗?
+```
+
+### 数组循环
+
+```django
+
+ {% for x in mymembers %}
+ - {{ x.firstname }}
+ {% endfor %}
+
+```
+
+### 模板标签参考
+
+
+标签 | 描述
+:- | :-
+`autoescape` | 指定自动转义模式是打开还是关闭
+`block` | 指定块部分
+`comment` | 指定注释部分
+`csrf_token` | 保护表单免受跨站点请求伪造
+`cycle` | 指定要在循环的每个循环中使用的内容
+`debug` | 指定调试信息
+`extends` | 指定父模板
+`filter` | 在返回之前过滤内容
+`firstof` | 返回第一个非空变量
+`for` | 指定一个 for 循环
+`if` | 指定一个 if 语句
+`ifchanged` | 仅当自上次迭代以来值已更改时才输出块
_(用于 for 循环)_
+`include` | 指定包含的内容/模板
+`load` | 从另一个库加载模板标签
+`lorem` | 输出随机文本
+`now` | 输出当前日期/时间
+`regroup` | 按组对对象进行排序
+`resetcycle` | 循环使用,重置循环
+`spaceless` | 删除 HTML 标签之间的空格
+`templatetag` | 输出指定的模板标签
+`url` | 返回 URL 的绝对 URL 部分
+`verbatim` | 指定不应由模板引擎呈现的内容
+`widthratio` | 给定值和最大值之间的比率计算宽度值
+`with` | 指定要在块中使用的变量
+
+
+### If 语句
+
+```django
+{% if greeting == 1 %}
+ Hello
+{% elif greeting == 2 %}
+ Welcome
+{% else %}
+ Goodbye
+{% endif %}
+```
+
+### For 循环
+
+
+```django
+{% for x in cars %}
+ {{ x.brand }}
+ {{ x.model }}
+ {{ x.year }}
+{% endfor %}
+```
+
+数据 cars 空的展示内容:
+
+```django
+
+ {% for x in cars %}
+ {{ x.brand }}
+ {{ x.model }}
+ {{ x.year }}
+ {% empty %}
+ - No members
+ {% endfor %}
+
+```
+
+### 循环变量
+
+
+- `forloop.counter` 当前循环,从 1 开始
+- `forloop.counter0` 当前循环,从 0 开始
+- `forloop.first` 循环是否在其第一次循环中
+- `forloop.last` 循环是否在其最后一次循环中
+- `forloop.parentloop`
+- `forloop.revcounter` 如果从末尾开始并向后计数,则以 1 结束
+- `forloop.revcounter0` 如果从末尾开始并向后计数,则以 0 结束
+
+### 过滤值
+
+```django
+你好 {{ firstname|upper }},你好吗?
+```
+
+返回带有大写字母的变量名
+
+### 注释
+
+
+```django
+欢迎大家{# 较小的注释 #}
+{% comment %}
+ 欢迎女士们先生们
+{% endcomment %}
+```
+
+#### 注释描述
+
+```django
+欢迎大家{# 较小的注释 #}
+{% comment "这是最初的欢迎信息" %}
+ 欢迎女士们先生们
+{% endcomment %}
+```
+
+注释允许您拥有应该被忽略的代码部分
+
+### 双过滤值
+
+```django
+你好 {{ firstname|first|upper }},你好吗?
+```
+
+返回变量 `firstname` 的第一个字符,小写
+
+### 过滤器标签
+
+```django
+{% filter upper %}
+ Hello everyone, how are you?
+{% endfilter %}
+```
+
+返回内容大写
+
+### cycle
+
+
+如果你想为每次循环使用新的背景颜色,你可以使用 `cycle` 标签来做到这一点
+
+```django
+
+ {% for x in members %}
+ -
+ {{ x.firstname }}
+
+ {% endfor %}
+
+```
+
+将参数值保存在变量中,以便以后使用:
+
+```django
+
+ {% for x in members %}
+ {% cycle 'lightblue' 'pink' 'yellow' 'coral' 'grey' as bgcolor silent %}
+ -
+ {{ x.firstname }}
+
+ {% endfor %}
+
+```
+
+你注意到 `silent` 关键字了吗? 确保添加这个,否则参数值将在输出中显示两次
+
+```django
+
+ {% for x in members %}
+ {% cycle 'lightblue' 'pink' 'yellow' 'coral' 'grey' as bgcolor silent %}
+ {% if forloop.counter == 3 %}
+ {% resetcycle %}
+ {% endif %}
+ -
+ {{ x.firstname }}
+
+ {% endfor %}
+
+```
+
+您可以使用 `{% resetcycle %}` 标签强制循环重新开始
+
+### 每一行添加行号
+
+```django
+{% filter upper|linenumbers %}Hello!
+my name is
+Emil.
+What is your name?{% endfilter %}
+```
+
+返回内容`大写`并在每一行添加`行号`
+
+### 导入模板
+
+`footer.html`:
+
+```django
+您已到达本页底部,感谢您抽出宝贵时间
+```
+
+`template.html`:
+
+```django
+Hello
+此页面包含模板中的页脚
+{% include 'footer.html' %}
+```
+
+### 导入模板传入变量
+
+`mymenu.html`:
+
+```django
+HOME | {{ me }} | ABOUT | FORUM | {{ sponsor }}
+```
+
+
+`template.html`:
+
+```django
+{% include mymenu.html with me="张三" sponsor="Reference" %}
+
+Welcome
+
+This is my webpage
+```
+
+
+### 过滤器参考
+
+
+Keyword | Description
+:- | :-
+`add` | 添加指定的值
+`addslashes` | 在任何引号字符之前添加一个斜杠,以转义字符串
+`capfirst` | 返回大写的第一个字母
+`center` | 使值在指定宽度的中间居中
+`cut` | 删除任何指定的字符或短语
+`date` | 以指定格式返回日期
+`default` | 如果值为 `False`,则返回指定值
+`default_if_none` | 如果值为 `None`,则返回指定的值
+`dictsort` | 按给定值对字典进行排序
+`dictsortreversed` | 按给定值对字典进行反向排序
+`divisibleby` | 如果该值可以除以指定的数字,则返回 `True`,否则返回 `False`
+`escape` | 从字符串中转义 `HTML` 代码
+`escapejs` | 从字符串中转义 `JavaScript` 代码
+`filesizeformat` | 将数字返回为文件大小格式
+`first` | 返回对象的第一项(对于字符串,返回第一个字符)
+`floatformat` | 将浮点数四舍五入到指定的小数位数,默认为一位小数
+`force_escape` | 从字符串中转义 `HTML` 代码
+`get_digit` | 返回数字的特定数字
+`iriencode` | 将 `IRI` 转换为 `URL` 友好字符串
+`join` | 将列表中的项目返回为字符串
+`json_script` | 将一个对象返回为由 `` 标签包围的 `JSON` 对象
+`last` | 返回对象的最后一项(对于字符串,返回最后一个字符)
+`length` | 返回对象中的项目数,或字符串中的字符数
+`length_is` | 如果长度与指定的数字相同,则返回 `True`
+`linebreaks` | 返回带有 `
` 而不是换行符和 `` 而不是多个换行符的文本
+`linebreaksbr` | 返回带有 `
` 的文本,而不是换行符
+`linenumbers` | 返回每行带有行号的文本
+`ljust` | 根据指定的宽度左对齐值
+`lower` | 以小写字母返回文本
+`make_list` | 将值转换为列表对象
+`phone2numeric` | 将带字母的电话号码转换为数字电话号码
+`pluralize` | 如果指定的数值不是 `1`,则在值的末尾添加一个 `s`
+`pprint` |
+`random` | 返回对象的随机项
+`rjust` | 根据指定的宽度右对齐值
+`safe` | 标记此文本是安全的,不应进行 `HTML` 转义
+`safeseq` | 将对象的每个项目标记为安全且项目不应进行 `HTML` 转义
+`slice` | 返回文本或对象的指定切片
+`slugify` | 将文本转换为一个长字母数字小写单词
+`stringformat` | 将值转换为指定格式
+`striptags` | 从文本中删除 `HTML` 标记
+`time` | 以指定格式返回时间
+`timesince` | 返回两个日期时间之间的差
+`timeuntil` | 返回两个日期时间之间的差
+`title` | 文本中每个单词的第一个字符大写,所有其他字符都转换为小写
+`truncatechars` | 将字符串缩短为指定数量的字符
+`truncatechars_html` | 将字符串缩短为指定数量的字符,而不考虑任何 `HTML` 标记的长度
+`truncatewords` | 将字符串缩短为指定数量的单词
+`truncatewords_html` | 将字符串缩短为指定数量的单词,而不考虑任何 `HTML` 标记
+`unordered_list` | 将对象的项目返回为无序列的 `HTML` 列表
+`upper` | 以大写字母返回文本
+`urlencode` | `URL` 对字符串进行编码
+`urlize` | 将字符串中的任何 `URL` 作为 `HTML` 链接返回
+`urlizetrunc` | 将字符串中的任何 `URL` 作为 `HTML` 链接返回,但会将链接缩短为指定的字符数
+`wordcount` | 返回文本中的单词数
+`wordwrap` | 以指定的字符数换行
+`yesno` | 将布尔值转换为指定值
+`i18n` |
+`l10n` |
+`tz` |
+
另见
----