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 

  • 相关阅读:
    JDK动态代理
    回顾反射机制Method
    静态代理和动态代理
    使用jQuery实现ajax请求
    ajax函数
    事件 on
    函数2
    pytest-mock 调试实例
    Linux自启动tomcat
    第一次做性能测试
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/9806197.html
Copyright © 2011-2022 走看看