一、上周内容回顾

  

  1. day64
  2. 内容回顾:
  3. 1. 所有的django命令
  4. 1. 安装
  5. pip install django==1.11.14
  6. pip install -i django==1.11.14
  7. 2. 创建项目
  8. django-admin startproject 项目名称
  9. 3. 启动项目
  10. python manage.py runserver 127.0.0.1:8000
  11. python manage.py runserver 80 127.0.0.1:80
  12. python manage.py runserver 0.0.0.0:80 0.0.0.0:80
  13. 4. 创建APP
  14. python manage.py startapp app01
  15. 5. 数据库迁移
  16. Python manage.py makemigrations # 将models的变化记录下来
  17. python manage.py migrate # 将变更更新到数据库当中
  18.  
  19. 2. 配置
  20. 1. 静态文件
  21. STIATIC_URL = '/static/' # 别名
  22. STIATICFILES_DIRS = [
  23. os.path.join(BASE_DIR,'static'),
  24. ]
  25. 2. 注释csrf中间件
  26. 3. TEMPLATES DIRS os.path.join(BASE_DIR,'teamplates')
  27. 4. DATABASES
  28. 5. INSTALLED_APPS =[
  29. 'app01' 或者 'app01.apps.App01Config'
  30. ]
  31. 3. ORM类和数据库对应关系
  32. ——》 数据表
  33. 对象 ——》 数据行
  34. 属性 ——》 字段
  35. 4. django使用mysql数据的流程
  36. 1. 创建mysql的数据库
  37. 2. 配置
  38. ENGINE: mysql
  39. NAME: 数据库名字
  40. HOST: ip地址
  41. PORT3306
  42. USER: 用户名
  43. PASSWORD: 密码
  44. 3. 告诉django使用pymysql模块连接你的mysql数据库
  45. 在与项目同名文件夹下的__init__.py文件写:
  46. import pymysql
  47. pymysql.install_as_MySQLdb()
  48. 4. app01下的models.py中写类(必须继承models.Model):
  49. class Publisher(models.Model):
  50. id = models.AutoField(primary_key=True)
  51. name = models.CharField(max_length=32, null=False, unique=True)
  52. addr = models.CharField(max_length=128, null=False)
  53.  
  54. def __str__(self):
  55. return "< Publisher object: {}>".format(self.name)
  56.  
  57. class Book(models.Model):
  58. id = models.AutoField(primary_key=True)
  59. title = models.CharField(max_length=32, null=False, unique=True)
  60. publisher = models.ForeignKey(to='Publisher', on_delete=models.CASCADE)
  61.  
  62. def __str__(self):
  63. return "< Publisher object: {}>".format(self.title)
  64.  
  65. class Author(models.Model):
  66. id = models.AutoField(primary_key=True)
  67. name = models.CharField(max_length=32, null=False, unique=True)
  68. books = models.ManyToManyField(to='Book')
  69.  
  70. 5. 执行数据库迁移的命令
  71. Python manage.py makemigrations
  72. python manage.py migrate
  73. 5.ORM操作
  74. 1.
  75. models.Publisher.objects.all() # 查询所有的出版社对象的集合
  76. models.Publisher.objects.get(id=1,nam='sss) # 查询指定的满足条件的对象 ——》一个对象
  77. models.Publisher.objects.filter(id=1,name='sss') # 查询满足条件的所有对象 ——》 对象列表
  78. models.Publisher.objects.all().order_by('id') # 排序
  79.  
  80. 属性:
  81. 无外键、多对多:
  82. pub_obj.id
  83. pub_obj.name
  84. 外键:
  85. book_obj.id
  86. book_obj.name
  87. book_obj.publisher ——》book所关联的出版社对象
  88. book_obj.publisher.id
  89. book_obj.publisher_id
  90. 多对多:
  91. author_obj.id
  92. author_obj.name
  93. author_obj.books ——》django封装的管理对象
  94. author_obj.books.all() ——》 拿到作者管理的所有书籍的对象列表
  95. 2. 增
  96. models.Publisher.objects.create(name='新的出版社')
  97. 外键:
  98. models.Bookj.objects.create(name='新的书名',publisher_id=1)
  99. models.Bookj.objects.create(name='新的书名',publisher=pub_obj)
  100. 多对多:
  101. autho_obj = models.Author.objects.create(name='新的作者')
  102. autho_obj.books.set([1,2])
  103.  
  104. 3. 删
  105. models.Publisher.objects.get(id=1).delele()
  106. models.Publisher.objects.filter(name='xxx').delele()
  107. 4. 改
  108. pub_obj.name = '新的名字'
  109. pub_obj.save()
  110.  
  111. 外键:
  112. book_obj.name = '新的书名'
  113. book_obj.publisher = pub_obj
  114. # book_obj.publisher_id = pub_obj.id
  115. book_obj.save()
  116.  
  117. 多对多:
  118. author_obj.name='新的作者名'
  119. author_obj.save()
  120. author_obj.books.set([1,2,3])
  121.  
  122. 6. request ——》 封装了请求所有的内容
  123. request.method ——》请求方式 GET POST
  124. request.GET ——》 URL上面传参数 127.0.0.1:8000/del_book/?id=1&name='xx'
  125. 字典形式 request.GET['id'] request.GET.get('id')
  126. request.POST ——》POST请求提交的数据 字典
  127. request.POST['id'] request.POST.get('id')
  128.  
  129. 7. 函数的返回值 ——》必须是HttpResponse对象
  130. HttpResponse('字符串') ——》页面显示字符串的内容
  131. render(request,'HTML文件名',{k1:v1,}) ——》将字典的内容交给模板渲染成HTML 返回给浏览器
  132. redirect('/index/') 跳转 重定向 ——》返回一个响应头 Location:/index/
  133.  
  134. 1.今日内容:
  135. 1. django的模板:
  136. 1. 已经学的内容:
  137. {{ 变量 }}
  138. for 循环
  139. {% for name in name_list %}
  140. {{ name }}
  141. {{ forloop.counter }}
  142. {{ forloop.last }}
  143. {% endfor %}
  144.  
  145. if判断
  146. {% if 10>5 %}
  147. 操作
  148. {% endif %}
  149.  
  150. {% if 10>5 %}
  151. 操作
  152. {% else %}
  153. 条件不成立的操作
  154. {% endif %}
  155.  
  156. {% if 10>5 %}
  157. 操作
  158. {% elif 10>5 %}
  159. elif成立时的操作
  160. {% else %}
  161. 条件不成立的操作
  162. {% endif %}
  163. 2. 今天新的内容
  164. 1. 变量及(.)的使用
  165. 2. filters
  166. 3. 自定义filter

上周内容回顾

二、今日内容总结

1.变量和(.)的使用:

  1) Django模板中两种特殊符号:

      {{}} 和{%%}  # 变量和标签

     2) 变量

      变量名由字母数字和下划线组成。

     3) 点(.)

      用来获取对象的相应属性值。

      li.0   #取列表中的值

      dic.key   #取字典中的key对象的value

      obj.name   #取对象的属性值

       li.0.name

      obj.read  #取对象的方法,只能调用不带参数或参数有默认值的方法

    4) 当模板系统遇到一个(.)时,会按照如下的顺序去查询

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

 

2.filters

  过滤器,用来修改变量的显示结果。

  语法:{{value|filter_name:参数}}

    ‘|’左右没有空格  

    1)、default (不管有没有定义)

      {{value|default:‘nothing’}}

      如果value值没传的话就显示nothing

      TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用。 # 这个是指没有定义的,会优先于default执行,但是对于那些已定义的但是值为'',[],{}....会显示default或为空。 

       

  1. <p>{{ add|add:''|default:'你错了!' }}</p>
  2. <p>{{ djsdjfjds|default:'没有值' }}</p>
  3. <p>{{ string|default:'值为空' }}</p>
  4.  
  5. 40
  6.  
  7. 没定义
  8.  
  9. 值为空

    2)、filesizeformat

  1.       {{ value|filesizeformat }}

    3)、 add 给变量加参数

      {{value|add:'2'}}

      a.value值和add参数均为字符串形式,如都为整数则相加,如有一个不为整数则字符串拼接

      b.value值和add参数一个字符串,一个整数,value形式为整数或浮点型都能正常加运算,add参数不为整数则报错

      c.都为整数形式则运算值取整后进行加运算,非四舍五入

    4)、lower,upper、title

     5)、ljust、rjust、center   #

        {{value|ljust:'20'}}

        {{value|center:'20'}}

    6)、length

    7)、slice

      {{value|slice:'1:10:2'}}

      8)、first 、last、join、truncatechars

     {{value|first}}

     {{value|join:'++'}}

     {{value|truncatechars:9}} 

    9)、 date

     日期格式化     

  1.       {{ value|date:"Y-m-d H:i:s"}}
          
        默认格式化设置:

      

      引用方式变为:

  1.       <p>{{ date_test|date}}</p>
  1.     

      10)、safe 

      {{ value|safe}}

      过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。

    

3.自定义filter

    1)定义五步

       

    2)引用两步

         

     3) 自定义过滤器取别名

        

    4) 注意两个名字不能改:

      

    

  1. 记下来,省得每次google
  2.  
  3. 过滤器,变量的显示形式的改变
  4.  
  5. 一、形式:小写
  6.  
  7. {{ name | lower }}
  8.  
  9. 二、串联:先转义文本到HTML,再转换每行到 <p> 标签
  10.  
  11. {{ my_text|escape|linebreaks }}
  12.  
  13. 三、过滤器的参数
  14.  
  15. 显示前30个字
  16. {{ bio | truncatewords:"" }}
  17.  
  18. 格式化
  19. {{ pub_date | date:"F j, Y" }}
  20.  
  21. 过滤器列表
  22.  
  23. {{ 123|add:"" }} value加上一个数值
  24.  
  25. {{ "AB'CD"|addslashes }} 单引号加上转义号,一般用于输出到javascript
  26.  
  27. {{ "abcd"|capfirst }} 第一个字母大写
  28.  
  29. {{ "abcd"|center:"" }} 输出指定长度的字符串,并把值对中
  30.  
  31. {{ "123spam456spam789"|cut:"spam" }} 查找删除指定字符串
  32. {{ value|date:"F j, Y" }} 格式化日期
  33.  
  34. {{ value|default:"(N/A)" }} 值不存在,使用指定值
  35.  
  36. {{ value|default_if_none:"(N/A)" }} 值是None,使用指定值
  37.  
  38. {{ 列表变量|dictsort:"数字" }} 排序从小到大
  39.  
  40. {{ 列表变量|dictsortreversed:"数字" }} 排序从大到小
  41.  
  42. {% if 92|divisibleby:"" %} 判断是否整除指定数字
  43.  
  44. {{ string|escape }} 转换为html实体
  45.  
  46. {{ 21984124|filesizeformat }} 1024为基数,计算最大值,保留1位小数,增加可读性
  47.  
  48. {{ list|first }} 返回列表第一个元素
  49.  
  50. {{ "ik23hr&jqwh"|fix_ampersands }} &转为&amp;
  51.  
  52. {{ 13.414121241|floatformat }} 保留1位小数,可为负数,几种形式
  53.  
  54. {{ 13.414121241|floatformat:"" }} 保留2位小数
  55.  
  56. {{ 23456 |get_digit:"" }} 从个位数开始截取指定位置的1个数字
  57.  
  58. {{ list|join:", " }} 用指定分隔符连接列表
  59.  
  60. {{ list|length }} 返回列表个数
  61.  
  62. {% if 列表|length_is:"" %} 列表个数是否指定数值
  63.  
  64. {{ "ABCD"|linebreaks }} 用新行用<p> <br /> 标记包裹
  65.  
  66. {{ "ABCD"|linebreaksbr }} 用新行用<br /> 标记包裹
  67.  
  68. {{ 变量|linenumbers }} 为变量中每一行加上行号
  69.  
  70. {{ "abcd"|ljust:"" }} 把字符串在指定宽度中对左,其它用空格填充
  71.  
  72. {{ "ABCD"|lower }} 小写
  73.  
  74. {% for i in "1abc1"|make_list %}ABCDE,{% endfor %} 把字符串或数字的字符个数作为一个列表
  75.  
  76. {{ "abcdefghijklmnopqrstuvwxyz"|phone2numeric }} 把字符转为可以对应的数字??
  77.  
  78. {{ 列表或数字|pluralize }} 单词的复数形式,如列表字符串个数大于1,返回s,否则返回空串
  79.  
  80. {{ 列表或数字|pluralize:"es" }} 指定es
  81.  
  82. {{ 列表或数字|pluralize:"y,ies" }} 指定ies替换为y
  83.  
  84. {{ object|pprint }} 显示一个对象的值
  85.  
  86. {{ 列表|random }} 返回列表的随机一项
  87.  
  88. {{ string|removetags:"br p div" }} 删除字符串中指定html标记
  89.  
  90. {{ string|rjust:"" }} 把字符串在指定宽度中对右,其它用空格填充
  91.  
  92. {{ 列表|slice:":2" }} 切片
  93.  
  94. {{ string|slugify }} 字符串中留下减号和下划线,其它符号删除,空格用减号替换
  95.  
  96. {{ 3|stringformat:"02i" }} 字符串格式,使用Python的字符串格式语法
  97.  
  98. {{ "E<A>A</A>B<C>C</C>D"|striptags }} 剥去[X]HTML语法标记
  99.  
  100. {{ 时间变量|time:"P" }} 日期的时间部分格式
  101.  
  102. {{ datetime|timesince }} 给定日期到现在过去了多少时间
  103. {{ datetime|timesince:"other_datetime" }} 两日期间过去了多少时间
  104.  
  105. {{ datetime|timeuntil }} 给定日期到现在过去了多少时间,与上面的区别在于2日期的前后位置。
  106.  
  107. {{ datetime|timeuntil:"other_datetime" }} 两日期间过去了多少时间
  108. {{ "abdsadf"|title }} 首字母大写
  109.  
  110. {{ "A B C D E F"|truncatewords:"" }} 截取指定个数的单词
  111.  
  112. {{ "<a>1<a>1<a>1</a></a></a>22<a>1</a>"|truncatewords_html:"" }} 截取指定个数的html标记,并补完整
  113.  
  114. <ul>{{ list|unordered_list }}</ul> 多重嵌套列表展现为html的无序列表
  115. {{ string|upper }} 全部大写
  116.  
  117. <a href="{{ link|urlencode }}">linkage</a> url编码
  118.  
  119. {{ string|urlize }} URLs由纯文本变为可点击的链接。(没有实验成功)
  120. {{ string|urlizetrunc:"" }} 同上,多个截取字符数。(同样没有实验成功)
  121.  
  122. {{ "B C D E F"|wordcount }} 单词数
  123.  
  124. {{ "a b c d e f g h i j k"|wordwrap:"" }} 每指定数量的字符就插入回车符
  125. {{ boolean|yesno:"Yes,No,Perhaps" }} 对三种值的返回字符串,对应是 非空,空,None

Django模板系统——过滤器

python全栈开发day64-模板-变量和(.)的使用,filters和自定义filter的更多相关文章

  1. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  2. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  3. python全栈开发学习_内容目录及链接

    python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_ ...

  4. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  5. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  6. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  7. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  8. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

  9. Python全栈开发

    Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“ ...

随机推荐

  1. struts2框架学习之第三天

    day03 上传下载 1        上传下载组件介绍 l  jspSmartUpload(model1的年代): l  apache-commons-fileupload,Struts2默认上传组 ...

  2. C语言 16进制转float

    float hex_to_float(uint8_t *data) { float num = 0.0; uint8_t dd[4] = {data[0], data[1], data[2], dat ...

  3. $Django redis内存数据库 (知识回顾cmd切换目录)

    知识小回顾 #切换盘 C:\Users\WangDong>f: F:\> #切换文件 F:\>cd redis F:\redis> #返回上一级 F:\DJ\dj8>cd ...

  4. C/C++中如何在main()函数之前执行一条语句?

    在C语言中,如果使用GCC的话,可以通过attribute关键字声明constructor和destructor(C语言中如何在main函数开始前执行函数) #include <stdio.h& ...

  5. HDU 1796 (容斥原理)

    容斥原理练习题,忘记处理gcd 和 lcm,wa了几发0.0. #include<iostream> #include<cstdio> #include<cstring& ...

  6. 前端 ----jQuery操作表单

    05-使用jQuery操作input的value值   表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用j ...

  7. spark-streaming集成Kafka处理实时数据

    在这篇文章里,我们模拟了一个场景,实时分析订单数据,统计实时收益. 场景模拟 我试图覆盖工程上最为常用的一个场景: 1)首先,向Kafka里实时的写入订单数据,JSON格式,包含订单ID-订单类型-订 ...

  8. vue---分页搜索功能

    <template> <div> <div class="searc"> <input type="search" p ...

  9. Android 组件化方案探索与思考

    Android 组件化方案探索与思考 组件化项目,通过gradle脚本,实现module在编译期隔离,运行期按需加载,实现组件间解耦,高效单独调试. 本项目github地址 https://githu ...

  10. Confluence 6 针对 key "cp_" 或 "cps_" 的 "Duplicate Entry" 问题解决

    如果你遇到了下面的错误信息,例如: com.atlassian.confluence.importexport.ImportExportException: Unable to complete im ...