2019.03.24 过滤器
作者:互联网
就是对传过来的数据进行再加工呗
还是在讲视图层这块,如何处理传过来的参数
过滤器
-
可以通过过滤器来修改变量的显示,过滤器的形式是:{{ variable | filter }},管道符号'|'代表使用过滤器
-
过滤器能够采用链式的方式使用,例如:{{ text | escape | linebreaks }}
-
过滤器还可以带参数,例如: {{ bio|truncatewords:30 }}
-
过滤器的参数中如果带有空格,那么需要用引号引起来,例如:{{ list | join : ", "}}
-
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>
创建自定义过滤器
-
在应用包下创建一个名为"templatetags"的python package
-
在包中创建一个自定义的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中设置让其关联起来就可以了
实现步骤
-
应用包下创建my_context_processor.py文件
#coding=utf-8
def mydata(request):
return {'uname':'zhangsan'}
-
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'
],
},
},
]
-
创建视图函数接收数据
# -*- 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)
-
直接在模板页面接收数据
{{uname}}
标签:24,utf,2019.03,value,django,context,过滤器,import 来源: https://www.cnblogs.com/Py-king/p/10588139.html