zoukankan      html  css  js  c++  java
  • Django模板语言及视图


    1.Django的模板语言

    1.{{ name }} -->变量
    2.for循环:
    {% for i inbook_list %}
    {{ forloop.counter }}
    {{ forloop.last }}
    {{i}}
    {% endfor %}
    3. if判断
    {% if 10>5 %}
    ...
    {% else %}
    ...
    {% endif %}
    4.if ... in 判断
    {% if name in name_list %}
    ...
    {% 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. 为什么要有模板和继承:
    把多个页面公用的部分提取出来,放在一个 母版 里面。
    其他的页面只需要 继承 母版就可以了。
    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

    比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. 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.py) http://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匹配模式有重复的别名

  • 相关阅读:
    java-第二周学习总结
    春季总结
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    网络层思维导图
    数据链路层思维导图
    Mysql数据库的基本操作之建表操作(2)
  • 原文地址:https://www.cnblogs.com/l-jie-n/p/9660434.html
Copyright © 2011-2022 走看看