zoukankan      html  css  js  c++  java
  • Django模板语言(二)

     1,装饰器:在不改变原函数的调用方式情况下为原函数增加一些功能(遵循开放封闭的原则)

    def outter(fn):
        def inner(*args, **kwargs):
            # 可以在执行函数前执行一些代码
            ret = fn(*args, **kwargs)
    
        
            # 可以在被装饰函数之后的操作代码
    
            return ret
    
        return inner
    
    @outter
    
    def func(tools):
    
        return "小时候,一双大手牵着温柔的对我讲"
    
    func("流浪")

     2,组件:当常用且重复的页面如导航栏,尾页等组件保存在单独的文件中,然后在需要使用的html文件的地方按如下语法导入即可:(提高代码的复用率,提高代码的可维护性)

    {% include "nav.html" %}

    3,静态文件相关

    {% load static %}
    # 写上这个就好改多了,灵活性提高了

     引用css文件样式{% static "相对路径" %}   ---->去settings中获取STATIC_URL和相对路径进行拼接

     {% get_static_prefix %}    ----->去settings中获取STATIC_URL "/static/"

      "{% get_static_prefix %}"获取静态文件的前缀

    4,自定义simpletag:和自定义filter类似,只不过接受更灵活的参数,定义注册simple tag

    @register.simple_tag(name="plus")
    def plus(a, b, c):
        return "{} + {} + {}".format(a, b, c)

    使用自定义simple tag

    {% load app01_demo %}
    {% plus "雪雪" "小雪" "雪人" %}

     5,自定义inclusion_tag步骤

      5.1>在APP下创建一个templatetags的包,templatetags单词不拼错

      5.2>在包下写py文件mytags

      5.3>编辑文件:

        from django import template  # 从Django中导入template

        register = template.Library()  # 实例化一个Library的对象

      5.4>定义函数:1,可以接受参数  2,返回一个字典

      5.5>函数加上装饰器:@register.inclusion_tag("pagination.html")html文件名

      5.6>函数返回的字典交给html文件(pagination.html)

     

    6,视图

    6.1>视图的分类:CBV和FBV

      CBV:class based view

      FBV: function based view

    6.2>CBV的流程

      6.2.1>定义CVB

      from django.views import View

      

    from django.views import View
    class AddPress(View):
        def get(self,request):
            print("get")
            print(self.request)
            return render(self.request, "add_press.html")
        def post(self,request):
    
            print("post")
    
            press_name = request.POST.get("name")
    
            return redirect("/press_list/")

      6.2.2>使用

        url(r'^add_press/$', views.AddPress.as_view())  # 在url执行函数的部分要写类名.as_view()

      6.2.3>流程

        1>AddPress.as_view()    ------>view函数

        2>当请求到来的时候执行view函数

        3>实例化自己写的类  ------->self       ------>self.cls(**initkwargs)

        4>self.request = request

        5>执行父类中的self.dispatch(request, *args, **kwargs)

        6>判断请求方式是否被允许

          <1>允许的情况下:handler = 通过反射 get post 方法

          <2>不允许的情况下:handler = 不允许的方法

          <3>handle(request, *args,**kwargs)

          <4>返回HttpResponse对象

        7>返回HttpResponse对象给django

    7,response

      from django.shortcuts import render, redirect, HttpResponse

      7.1>HttpResponse  HttpResponse("字符串")

      7.2>render(request, "html文件名", {"参数":替换的参数})

      7.3>redirect(跳转的地址)

      7.4>HttpResponse(json.dumps(ret))  # content-Type:text/html;charset=utf-8

          JsonResponse(ret)  #Content-Type:application/json 

  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/9806197.html
Copyright © 2011-2022 走看看