首页 > 其他 > 详细

小白学习django第三站-自定义过滤器及标签

时间:2019-08-03 15:55:16      阅读:87      评论:0      收藏:0      [点我收藏+]

要使用自定义过滤器和标签,首先要设置好目录结构

现在项目目录下建立common的python包

技术分享图片

再将common加入到setting.py中的INSTALLED_APP列表中

技术分享图片

在common创建目录templatetags,再在其中创建自定义过滤器和标签等

技术分享图片

在自定义common_extras.py中编写自定义过滤器和标签

from django import template
import datetime

register = template.Library()   # 固定写法

@register.filter
def my_sort(value):
    a = sorted(value)
    return a

@register.filter(myup)
def my_upper(value):
    return value.upper()


@register.filter
def my_cut(value, arg):
    c = value.replace(arg, +)
    return c

# 不带参数
@register.simple_tag
def current_time1():
    format_string = "%Y年%m月%d日 %H:%M:%S"
    return datetime.datetime.now().strftime(format_string)

# 带参数
@register.simple_tag
def current_time2(formate_string):
    return datetime.datetime.now().strftime(formate_string)

# 带上下文参数的
@register.simple_tag(takes_context=True) # 允许使用上下文
def current_time3(context):
    format_string = context.get(format_string)
    return datetime.datetime.now().strftime(format_string)
    # format_string = context.get(‘format_string‘)
    # return format_string


@register.simple_tag
def add(a, b):
    c = a + b
    return c

@register.simple_tag(takes_context=True)
def sorted1(context):
    b = context.get(list)
    return sorted(b)
# 包含标签
# 不带参数
@register.inclusion_tag(test_app/show_takes.html)
def show_results1():
    li = [web, c++, python, java, php]
    return {choice: li}

# 带参数
@register.inclusion_tag(test_app/show_takes.html)
def show_results2(li):
    return {choice: li}

# 上下文参数
@register.inclusion_tag(test_app/show_takes.html, takes_context=True)
def show_results3(context):
    data = context.get(list)
    return {choice: data}

 

test HTML中编写

{%  load common_extras %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
<ul style="color: blue">自定义过滤器
    <li>将名字大写:{{ name|myup }}</li>
    <li>将列表按顺序:{{ list|my_sort }}</li>
    <li>替换字母{{ name }}:{{ name|my_cut:‘u‘ }}</li>
</ul>

<ul style="color:green">简单自定义标签
    <li>不带参数输出:{% current_time1 %}</li>
    <li>带参数输出:{% current_time2 "%Y年%m月%d日 %H:%M:%S" %}</li>
    <li>使用上下文输出:{% current_time3 %}</li>
    <li>使用加法:{% add 1 2 %}</li>
    <li>使用上下文排序:{% sorted1 %}</li>
</ul>

<ul style="color:red">包含自定义标签
    <li>不带参数:{% show_results1 %}</li>
    <li>带参数:{% show_results2 ‘12345‘ %}</li>
    <li>使用上下文:{% show_results3 %}</li>
</ul>
</body>
</html>

 

 test.py 文件中编写

def func(requset):
    return render(requset, test_app/test1.html,
                  context={
                      name: xuning,
                      age: 33,
                      list: [1, 2, 4, 3, 6, 5],
                      format_string: "%Y年%m月%d日 %H:%M:%S",
                  })

 

 show_take.html 文件中编写(包含标签):多次调用这个方法,只有choice变量这个不同,可以将这部分代码进行封装

{% for i in choice %}
   {{ i }}
{% endfor %}

 

 浏览器中显示

 技术分享图片

 

小白学习django第三站-自定义过滤器及标签

原文:https://www.cnblogs.com/xnnx/p/11294939.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!