-
模板系统(字符串替换)
1. 语法
1. 变量相关: {{ name }},{{name|length}},{{name|default:“默认值”}}
2. 逻辑相关:
1. if判断
{% if a > b %}
{% endif %}{% if a > b %} {% else %} {% endif %} {% if a > b %} {% elif %} {% else %} {% endif %} 2. for循环 1. for循环的基本用法: {% for i in name_list %} {{ i }} {% endfor %} {% for i in name_list %} {{ i }} {% empty %} 空空如也 {% endfor %} 2. for循环可用的属性: forloop.counter forloop.counter0 forloop.revcounter forloop.revcounter0 forloop.first forloop.last forloop.parentloop --> 两层for循环,内层循环引用外层循环 2. filter 1. 常用的内置filter 1. length 2. filesizeformat --> 格式化文件大小的 3. date:'Y-m-d H:i:s' --> 格式化时间的 4. slice 5. safe --> XSS攻击(跨站脚本攻击) 6. truncatechars:20 --> 截取字符,超过的用...表示 7. default 2. 自定义的filter 示例: 1. addsb 2. addstr 具体的实现方式: 1. 定义阶段 1. 在app下面新建一个python的包:templatetags 2. 在上面的Python包中新建一个Python文件,名字随意 3. 在上述python文件中: from django import template # 生成一个注册用的实例 register = template.Library() # 定义并注册一个自定义的filter函数 @register.filter(name='addsb') def add_sb(arg): return "{} sb".format(arg) 2. 调用阶段: 1. 在Django的模板文件中,导入刚才新建的python文件 {% load py文件名 %} 2. 按照filter的语法调用 {{ name|addsb }}
-
今日内容
-
母版和继承
-
为什么要有模板和继承:
把多个页面公用的部分提取出来,放在一个 母版 里面。
其他的页面只需要 继承 母版就可以了。 -
具体使用的步骤:
- 把公用的HTML部分提取出来,放到base.html文件中
- 在base.html中,通过定义block,把每个页面不同的部分区分出来
- 在具体的页面中,先继承母版
- 然后block名去指定替换母版中相应的位置
-
使用母版和继承的注意事项:
- {% extends ‘base.html’ %} --> 母版文件:base.html要加引号
- {% extends ‘base.html’ %}必须放在子页面的第一行!!!
- 可以在base.html中定义很多block,通常我们会额外定义page-css和page-js两个块
- view.py相应的函数中返回的是对应的子页面文件 不是不是不是 base.html
-
-
组件
{% include ‘xxx.html’%} -
静态文件的灵活写法
- {% load static %}
{% static ‘jQuery-3.3.1.js’ %} - {% get_static_prefix %}jQuery-3.3.1.js
- {% load static %}
-
自定义simple_tag和inclusion_tag
-
-
母版和继承
-
什么时候用母版?
html页面有重复的代码,把它们提取出来放到一个单独的html文件。
(比如:导航条和左侧菜单) -
子页面如何使用母版?
{% extends ‘base.html’ %} --> 必须要放在子页面的第一行母版里面定义block(块),子页面使用block(块)去替换母版中同名的块
-
-
组件
- 什么时候用组件?
重复的代码,包装成一个独立的小html文件。 - 如何使用?
{% include ‘nav.html’ %}
- 什么时候用组件?
-
Django模板语言中关于静态文件路径的灵活写法
- 利用Django模板语言内置的static方法帮我拼接静态文件的路径
{% load static %} - 利用内置的get_static_prefix获取静态文件路径的别名,我们自行拼接路径
{% load static %} - as语法(一个路径多次用到,可以使用as保存到一个变量,后面就直接使用变量代替具体路径)
- 利用Django模板语言内置的static方法帮我拼接静态文件的路径
-
自定义的simple_tag
比filter高级一点点
它可以接受的参数个数大于2 -
自定义的inclusion_tag
用来返回一段html代码(示例:返回ul标签)-
定义阶段
在app下面新建templatetags 文件夹(注意是Python包)
新建一个py文件from django import template
生成注册示例,名字必须是register
register = template.Library()
@register.inclusion_tag(“ul.html”)
def show_ul(num):
num = 1 if num < 1 else int(num)
data = [“第{:0>3}号技师”.format(i) for i in range(1, num+1)]
return {“data”: data} -
调用阶段
{% load xx %}
{% show_ul 10 %}
-
-
-
-
今日内容
-
视图(接收请求返回响应那部分)
-
CBV(class base view)和FBV(function base view)
-
request对象
- 之前学过的
- request.method --> 获取请求的方法(GET、POST等)
- request.GET --> 通常用来获取URL里面的参数
127.0.0.1:8000/edit_book/?id=1&name=yimi
request.GET --> {“id”:1, “name”:“yimi”}
request.GET.get(“id”) - request.POST --> 用来获取POST提交过来的数据
request.POST.get(“book_name”)
- 补充其他常用的:
- request.path_info --> 获取用户请求的路径(不包含IP和端口和URL参数)
- request.body
- 之前学过的
-
response
基础必备三件套(求学要严谨)-
HttpResponse --> 返回字符串内容
-
render --> 返回一个html页面
-
redirect --> 返回一个重定向(告诉浏览器再去访问另外的网址)
-
JsonResponse
-
-
-
路由系统(urls.py) http://www.cnblogs.com/liwenzhou/p/8271147.html
- 正则表达式的模糊匹配
- 分组匹配 --> 相当于给视图函数传递位置参数
- 分组命名匹配 --> 相当于给视图函数传递关键字参数
(两个不要混合使用)
-
---------------------------- 这里是坎 ------------------------------------
4. 反向解析URL
本质上就是给url匹配模式起别名,然后用过别名拿到具体的URL路径
1. 怎么起别名?
在url匹配模式中,定义name="别名"
2. 如何使用?
1. 在模板语言里面使用:
{% url "别名" %} --> 得到具体的URL路径
2. 在视图中如何使用:
from django.urls import reverse
reverse("别名") --> 得到具体的URL路径
3. 如何传参数?
1. 模板语言中:
{% url "别名" 2018 "nb" %}
2. 视图函数中
传位置参数:
reverse("别名", args=(2018, "nb"))
传关键字参数:
reverse("别名" kwargs={"year": 2018, "title": "nb"})
4. namespace
为了防止不同的app下面的url匹配模式有重复的别名