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}}

猜你喜欢

转载自www.cnblogs.com/Py-king/p/10588139.html
今日推荐