Django老男孩笔记进阶

Django的模板系统

  • 主要记住两种语法
    {{ }}{% %}
    变量相关的用{{}}, 逻辑相关的用{% %}

示例:
变量

  1. {{ name }} 变量
  2. for循环:
{% for i in book_list %}
  {{forloop.counter}}
  {{forloop.last}}
  {{i}}
{% endfor %}
  1. if判断
{% if 10 > 5 %}
{% else %}
{% endif %}
  1. if ... in 判断
{%  if name in name_list %}
{% endif %}

变量

当模板语言中遇到一个变量的时候,它会先去计算这个变量的值,如果有值,就用这个值代替原来的变量,如果这个值不存在,就不显示.
模板语言中.具有特殊的含义,当系统遇到.的时候会按照如下的顺序查询

  • 1.字典查询
  • 2.属性或者方法查询
  • 3.数字索引查询

注意: 如果计算结果是一个方法,可以调用的,它将作为一个无参数来调用.调用的结果将作为模板的值.如果使用的变量不存在,模板系统将用空字符串来代替

filter(过滤器)
语法: {{value|filter_name:参数}}

  • default
    如果一个变量是false或者为空,则使用给定的默认值,否则,使用变量的值
{{ value|default:"nothing"  }}

如果value没有传值或者值为空的话就显示nothing

  • filesizeformat
    将值格式化为一个人类可读的文件尺寸(例如 '13kb','4.1 MB',默认原来的单位是字节)
<p>文件大小: {{ file_size|filesizeformat }}</p>
  • length
    返回值的长度,作用于字符串和列表
返回value的长度,如果是value=['a','b','c','d']的话就显示4
  • slice
    切片 类似于python的列表和字符串切片,只是写法不同,这里使用字单引号包起来,中间用分号分割.
<p>切片: {{ name_list|slice:"1:-1" }}</p>
<p>切片: {{ name|slice:"0:-1" }}</p>
  • date
    格式化
{{  value|date: "Y-m-d H:i:s "}}
<p>时间: {{ now|date:"Y-m-d H:i:s" }}</p>

经过格式化后就变成下面这样


  • safe
    Django模板中默认会对是HTML标签和JS语法的标签进行字段转义,将其当成字符串显示到页面上.这样做的原因显而易见,
    是为了安全,但是有时候我们自己写代码的时候,也许需要自己添加一些标签或者js代码,这个时候,希望解除这种转义,让其把我们写的字符串当成是html标签或者是js,这个时候就可以使用value|safe的方法

如果没有使用safe,页面是这么显示的

<p>标签显示: </p>{{ html_str }}

当成了一个字符串显示到页面上.

如果使用了safe,则会当成一个标签嵌入到当前页面

<p>标签显示:</p>{{ html_str|safe }}
  • truncatechars
    如果字符串字符多于指定的字符数量,那么会被截断.截断的字符串将以可翻译的省略号序列('....')结尾
    参数,要截取的字符串的长度
<p>截断的字符串:{{ truncate_chars|truncatechars:9 }}</p>
  • 自定义filter
    自定义过滤器的使用步骤
    1. 首先是在app中创建一个模块名字叫templatetags,然后建立一个存放自定义的filter的文件

2. 然后在自己创建的.py文件中,定义并注册自己定义的想要使用的filter

使用我们自定义的filter

{% load app01_filters %}
<p>自定义filter的使用: {{ name|sb }}  {{ name|addstr:'第二个参数加起' }}</p>

注意, 这里加载模板的时候必须先重新启动项目,不然找不到对应的模块

for 循环

  • for 循环可以使用的一些参数


  • for ... empty
    当for循环没有任何数据的时候,需要显示的内容可以写到empty的后面.

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>空空如也</li>
{% endfor %}
</ul>

if 判断

with

csrf_token

注意

母版

  • 母版和继承
  1. 为什么要有模板和继承:
    把多个页面公用的部分提取出来,放在一个母版里面.其他的页面只需要继承母版就可以了.
  2. 具体的使用步骤:
    1> 把公用的HTML部分提取出来,刚到base.html文件中,其他的页面只需要继承母版就可以了
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
  {% block page-css %}
  
  {% endblock %}
</head>
<body>

<h1>这是母板的标题</h1>

{% block page-main %}

{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}

{% endblock %}
</body>
</html>

组件 include

静态文件相关

simple_tag
和自定义的filter类似,但是它可以接受任意个参数,并且它在使用的时候并不需要使用管道符.

1. 在templatetags下创建一个py文件simple_tag.py,然后在里面定义一个函数,并注册

2. 使用的时候,也是先加载

inclusion_tag
多用于返回html代码片段

Django的视图系统

视图的作用:
接受web请求并且返回web响应
无论视图本身包含什么逻辑,都要返回响应.我们一般约定视图写到对应的app的views.py中

FBV 和 CBV

Request对象和Response对象
当一个页面被请求的时候,Django会创建一个包含本次请求的信息的HttpRequest对象.
Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用request参数来接收这个对象.

Request 对象

上传文件
对应的html写法

上传文件的逻辑,注意使用的是chunks()

Response对象

httpResponse的使用

JsonResponse
JsonResponse是HttpResponse的子类


使用JsonResponse代替原来的json.dumps()

如何使用JsonResponse处理非字典的数据类型呢?

image.png

路由系统

Django的路由系统的概述
URL配置(URLconf)就像是Django所创建的网站的目录.它本质上是URL和该URL要调用的视图函数之间的映射表
Djang就是用这种方式告诉程序,对于这个URL调用这段代码,对于那个URL调用那段代码.

正则表达式详解



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355