模板系统

  1. 模板系统(字符串替换)
    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 }}
    
  2. 今日内容

    1. 母版和继承

      1. 为什么要有模板和继承:
        把多个页面公用的部分提取出来,放在一个 母版 里面。
        其他的页面只需要 继承 母版就可以了。

      2. 具体使用的步骤:

        1. 把公用的HTML部分提取出来,放到base.html文件中
        2. 在base.html中,通过定义block,把每个页面不同的部分区分出来
        3. 在具体的页面中,先继承母版
        4. 然后block名去指定替换母版中相应的位置
      3. 使用母版和继承的注意事项:

        1. {% extends ‘base.html’ %} --> 母版文件:base.html要加引号
        2. {% extends ‘base.html’ %}必须放在子页面的第一行!!!
        3. 可以在base.html中定义很多block,通常我们会额外定义page-css和page-js两个块
        4. view.py相应的函数中返回的是对应的子页面文件 不是不是不是 base.html
    2. 组件
      {% include ‘xxx.html’%}

    3. 静态文件的灵活写法

      1. {% load static %}
        {% static ‘jQuery-3.3.1.js’ %}
      2. {% get_static_prefix %}jQuery-3.3.1.js
    4. 自定义simple_tag和inclusion_tag

      1. 母版和继承

        1. 什么时候用母版?
          html页面有重复的代码,把它们提取出来放到一个单独的html文件。
          (比如:导航条和左侧菜单)

        2. 子页面如何使用母版?
          {% extends ‘base.html’ %} --> 必须要放在子页面的第一行

          母版里面定义block(块),子页面使用block(块)去替换母版中同名的块

      2. 组件

        1. 什么时候用组件?
          重复的代码,包装成一个独立的小html文件。
        2. 如何使用?
          {% include ‘nav.html’ %}
      3. Django模板语言中关于静态文件路径的灵活写法

        1. 利用Django模板语言内置的static方法帮我拼接静态文件的路径
          {% load static %}
        2. 利用内置的get_static_prefix获取静态文件路径的别名,我们自行拼接路径
          {% load static %}
        3. as语法(一个路径多次用到,可以使用as保存到一个变量,后面就直接使用变量代替具体路径)
      4. 自定义的simple_tag
        比filter高级一点点
        它可以接受的参数个数大于2

      5. 自定义的inclusion_tag
        用来返回一段html代码(示例:返回ul标签)

        1. 定义阶段
          在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}

        2. 调用阶段
          {% load xx %}
          {% show_ul 10 %}

  3. 今日内容

    1. 视图(接收请求返回响应那部分)

      1. CBV(class base view)和FBV(function base view)

      2. request对象

        1. 之前学过的
          1. request.method --> 获取请求的方法(GET、POST等)
          2. request.GET --> 通常用来获取URL里面的参数
            127.0.0.1:8000/edit_book/?id=1&name=yimi
            request.GET --> {“id”:1, “name”:“yimi”}
            request.GET.get(“id”)
          3. request.POST --> 用来获取POST提交过来的数据
            request.POST.get(“book_name”)
        2. 补充其他常用的:
          1. request.path_info --> 获取用户请求的路径(不包含IP和端口和URL参数)
          2. request.body
      3. response
        基础必备三件套(求学要严谨)

        1. HttpResponse --> 返回字符串内容

        2. render --> 返回一个html页面

        3. redirect --> 返回一个重定向(告诉浏览器再去访问另外的网址)

        4. JsonResponse

    2. 路由系统(urls.pyhttp://www.cnblogs.com/liwenzhou/p/8271147.html

      1. 正则表达式的模糊匹配
      2. 分组匹配 --> 相当于给视图函数传递位置参数
      3. 分组命名匹配 --> 相当于给视图函数传递关键字参数
        (两个不要混合使用)

---------------------------- 这里是坎 ------------------------------------

	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匹配模式有重复的别名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值