zoukankan      html  css  js  c++  java
  • 2019.03.24 过滤器

    就是对传过来的数据进行再加工呗

    还是在讲视图层这块,如何处理传过来的参数

    过滤器

    1. 可以通过过滤器来修改变量的显示,过滤器的形式是:{{ variable | filter }},管道符号'|'代表使用过滤器

    2. 过滤器能够采用链式的方式使用,例如:{{ text | escape | linebreaks }}

    3. 过滤器还可以带参数,例如: {{ bio|truncatewords:30 }}

    4. 过滤器的参数中如果带有空格,那么需要用引号引起来,例如:{{ list | join : ", "}}

    5. django中30个内置的过滤器

    栗子

        使用形式为:{{ value | add: "2"}}
          意义:将value的值增加2
           
           
      使用形式为:{{ value | capfirst }}
          意义:value的第一个字符转化成大写形式


      使用形式为:
                (a) {{ value | date:"Y-m-d h:i:s" }}
                例如:如果value是一个datetime对象(datetime.datetime.now())
                那么输出将是字符串"Wed 09 Jan 2008"
                (b) {{ value | date }},这种形式没有格式化字符串,这时候,格式化字符串会自动采用DATE_FORMAT所设置的形式。
            意义:将日期格式数据按照给定的格式输出
           
      使用形式:{{ value | default: "nothing" }},例如,如果value是"",那么输出将是nothing
            意义:如果value的意义是False,那么输出使用缺省值
       
      使用形式:{{ value | divisibleby:arg}},如果value是21,arg是3,那么输出将是True
          意义:如果value能够被arg整除,那么返回值将是True
           
           
      使用形式:{{ value | first }}
          意义:返回列表中的第一个Item,例如,如果value是列表['a','b','c'],那么输出将是'a'。

           
      使用形式:{{value | safe}}
                进行HTML标签转换
          意义:当系统设置autoescaping打开的时候,该过滤器使得输出不进行escape转换  
           

           
      使用形式:{{value | slugify}}
          意义:将value转换成小写形式,同时删除所有分单词字符,并将空格变成横线
          例如:如果value是how are you,那么输出将是how-are-you
           
      使用形式:{{value | truncatewords:2}}
          意义:将value切成truncatewords指定的单词数目
          例如:如果value是how are you 那么输出将是:how are …
           
           
           

     上节是内置的30个Django过滤器

    这一节呢介绍如何自定义过滤器  当不满足自己的需求时,

    可以查看底层代码,自定义个别需求

    配置URL

    from django.conf.urls import url, include
    from django.contrib import admin

    urlpatterns = [
      url(r'^admin/', admin.site.urls),
      url(r'^student/', include('student.urls')),
    ]


    #coding=utf-8


    from django.conf.urls import url
    import views


    urlpatterns=[
      url(r'^$',views.index_view)
    ]

    创建视图


    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.shortcuts import render

    # Create your views here.
    def index_view(request):
      content = '''####过滤器'''
      return render(request,'index.html',{'content':content})

    创建模板


    {% load filter_mark %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
    </head>
    <body>
      {{ content|md|safe }}

    </body>
    </html>

    创建自定义过滤器

    1. 在应用包下创建一个名为"templatetags"的python package

    2. 在包中创建一个自定义的py文件

    pip install markdown


    #coding=utf-8

    from django.template import Library

    #实例名必须是register
    register = Library()

    @register.filter
    def md(value):
      import markdown
      return markdown.markdown(value)






    截取字符串功能


    #coding=utf-8

    from django.template import Library

    register = Library()

    @register.filter
    def splitstr(value,args):
      start,end = args.split(',')
      content = value.encode('utf-8').decode('utf-8')
      return content[int(start):int(end)]
    • index.html页面


    {% load filter_mark %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Title</title>
    </head>
    <body>



      {{ content|splitstr:'1,20' }}

    </body>
    </html>

    什么鬼全局上下文,  全局变量不就可以了吗?

    就是定义一个全局的变量吧  都可以调用

    就几个步骤,记得在setting中设置让其关联起来就可以了

    实现步骤

    1. 应用包下创建my_context_processor.py文件

    #coding=utf-8

    def mydata(request):
      return {'uname':'zhangsan'}

    1. settings中配置当前函数路径


    TEMPLATES = [
      {
          'BACKEND': 'django.template.backends.django.DjangoTemplates',
          'DIRS': [os.path.join(BASE_DIR, 'templates')]
          ,
          'APP_DIRS': True,
          'OPTIONS': {
              'context_processors': [
                  'django.template.context_processors.debug',
                  'django.template.context_processors.request',
                  'django.contrib.auth.context_processors.auth',
                  'django.contrib.messages.context_processors.messages',
                  'stu.my_context_processor.mydata'
              ],
          },
      },
    ]

    1. 创建视图函数接收数据


    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.http import HttpResponse
    from django.shortcuts import render

    # Create your views here.
    from student.my_context_processor import mydata


    def index_view(request):

      from django.template import Template, RequestContext
      t = Template('hello:{{uname}}')

      render_string = t.render(RequestContext(request, dict_=None, processors=(mydata,)))

      return HttpResponse(render_string)
    1. 直接在模板页面接收数据


    {{uname}}

    这个就比较有意思了,模板继承

    继承和引入,挖坑和填坑

    继承是要填坑的,填的是你要改变的,填的是别人挖的坑

    引入的话就是引入相同的东西。写模板的时候就可会挖坑,让引用的人

    需要修改的地方填坑

    实现步骤

    1. 提供共同HTML页面内容base.html

    2. 编写子页面header.html,footer.html

    涉及语法

    #继承基础版本
    {% extends 'base.html' %}

    #挖洞 填坑
    {% block main %}
    {% endblock main %}


    #引入其他页面
    {% include 'header.html' %}
  • 相关阅读:
    转载 Spring boot中配置事务管理
    Mybatis Plus条件构造器condition动态判断优化
    【转载】 利用p6spy拦截并查看数据库执行操作
    使用P6Spy监控你的Spring boot数据库操作
    【转载】 《SpringBoot2.0 实战》系列-集成Quartz定时任务(持久化到数据库)
    baomidou的dynamic-datasource读写分离实现和加入AOP根据方法名选择库
    @EnableWebMvc 注解会让Swagger无效访问的问题
    RestTemplate发送请求并携带header信息
    Shell/Linux 将一个文件中的每两行合并成一行
    蛋白质印迹法(免疫印迹试验,Western Blot)
  • 原文地址:https://www.cnblogs.com/Py-king/p/10588139.html
Copyright © 2011-2022 走看看