A Little Django Notes
Well!!!! I had thought my website was closed down and had no energy to recover it. But now I find it still accessible from a network outside CN. It's banned just because... I hadn't set up the website Bei'an asked by CN gov on time. I'm just lazy and busy.
So, now, I can still post something.
Start
setup:
1 | django-admin startproject HelloWorld |
runserver:
1 | python3 manage.py runserver 0.0.0.0:8000 |
结构
views.py
视图:把变量传给网页模板
urls.py
路由:指定url地址对应的view
templates/xxx.html
模板:静态的网页模板,其中留一些变量空
e.g.
views.py
:
1 | from django.shortcuts import render |
urls.py
:
1 | from django.conf.urls import url |
templates/he.html
:
1 | <h1>{{viewName}}</h1> // 变量 |
模板中的语法
基本:{{变量名}}
变量名的具体操作
- 列表:可以用 . 索引下标取出对应的元素:
<p>{{ views_list.0 }}</p>
- 字典:可以用 .键 取出对应的值:
<p>{{ views_dict.name }}</p>
- 过滤器:
{{ 变量名 | 过滤器:可选参数 }}
- 小写:
{{ name|lower }}
- 首字母大写:
{{ my_list|first|upper }}
- 截取:
{{ bio|truncatewords:"30" }}
;truncatechars - addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
- date : 按指定的格式字符串参数格式化 date 或者 datetime 对象:
{{ pub_date|date:"F j, Y" }}
- length : 返回变量的长度
- 如果views传来的参数是false,则采用默认值:
{{ name|default:"菜鸟教程666" }}
- filesizeformat:文件大小
- safe:不需要转义
- 自定义过滤器
- 小写:
语法
if...elif...else
1 | {% if condition1 %} |
{% if %}
标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not )
ifequal/ifnotequal
1 | {% ifequal a b %} |
for...in...
1 | <ul> |
给标签增加一个 reversed 使得该列表被反向迭代
遍历字典: 可以直接用字典 .items 方法,用变量的解包分别获取键和值
1 | {% for i,j in views_dict.items %} |
在 {% for %}
标签里可以通过{{forloop}}
变量获取循环序号。
- forloop.counter: 顺序获取循环序号,从 1 开始计算
- forloop.counter0: 顺序获取循环序号,从 0 开始计算
- forloop.revcounter: 倒叙获取循环序号,结尾序号为 1
- forloop.revcounter0: 倒叙获取循环序号,结尾序号为 0
- forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
- forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False
嵌套其他模板
1 | {% include "nav.html" %} |
csrf_token
csrf_token 用于form表单中,作用是跨站请求伪造保护。
如果不用{% csrf_token %}
标签,在用 form 表单时,要再次跳转页面会报403权限错误。
用了{% csrf_token %}
标签,在 form 表单提交数据时,才会成功。
静态文件
1、在项目根目录下创建 statics 目录。
2、在 settings 文件的最下方配置添加以下配置:
1 | STATIC_URL = '/static/' # 别名 |
3、在 statics 目录下创建 css 目录,js 目录,images 目录,plugins 目录, 分别放 css文件,js文件,图片,插件。
4、把 bootstrap 框架放入插件目录 plugins。
5、在 HTML 文件的 head 标签中引入 bootstrap。
注意:此时引用路径中的要用配置文件中的别名 static,而不是目录 statics。
在模板中使用需要加入 {% load static %}
代码,以下实例我们从静态目录中引入图片。
views.py
:
1 | from django.shortcuts import render |
templates/runoob.html
:
1 | {% load static %} |
模板继承
父模板
标签block 是预留区域,给子模板填充差异性的内容,不同预留区域名字不能相同
1 | {% block 名称 %} |
子模板
使用标签 extends 继承父模板:
1 | {% extends "父模板路径"%} |
视图层的函数
输入:Request
常用的 request 属性:
GET
`POST`body
path
url中的路径部分method
获取当前请求的方式,数据类型是字符串,且结果为大写
输入的其他形参
就是url路径里后面的层,一层是一个形参
输出:
三种:HttpResponse()、render()、redirect()
- HttpResponse(): 返回文本,参数为字符串,字符串中写文本内容。如果参数为字符串里含有 html 标签,也可以渲染
- render(): 返回文本,第一个参数为
request
,第二个参数为'页面名'
,第三个参数为字典['页面参数名' : views参数名]
- redirect():重定向,跳转新页面。参数为
'页面路径'
。一般用于 form 表单提交后,跳转到新页面。