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实现 LeetCode 56 合并区间
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
  • 原文地址:https://www.cnblogs.com/l-jie-n/p/9660434.html
Copyright © 2011-2022 走看看