您现在的位置是:网站首页>技术文章>Django个人网站

Django使用jinja2模版后如何自定义过滤器

Petrichor2019-09-28 15:56Django340人已围观

简介个人网站,用来做什么?我刚开始就把它当做一个我吐槽心情的地方,也就相当于一个网络记事本,也会放上一些照片。后来也用来记录自己所学习的知识。

        Django在使用jinja2模版渲染后,如过想自定义过滤器,需要在settings.py中配置jinja2的环境的jinja2_env.py文件中定义过滤器。

        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        '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',
            ],
            # 补充Jinja2模板引擎环境
            'environment': 'blog_website.utils.jinja2_env.jinja2_environment',
        },
    },

定义自定义过滤器需要两步:

● 定义过滤器

● 将自定义过滤器加到jinja2的过滤器中

def jinja2_environment(**options):
    env = Environment(**options)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
    })
    # 将过滤器添加到jinja2中
    env.filters['time_filter'] = time_filter
    env.filters['date_time'] = date_time
    return env


# 定义了一个时间过滤器
def time_filter(datetime):
    ans_time = time.mktime(datetime.timetuple())
    timestamp = time.time() - ans_time
    if timestamp < 60:
        return '刚刚'
    elif 60 <= timestamp <= 60 * 60:
        minutes = timestamp / 60
        return '%s分钟前' % int(minutes)
    elif 60 * 60 <= timestamp <= 60 * 60 * 24:
        hours = timestamp / (60 * 60)
        return "%s小时前" % int(hours)
    elif 60 * 60 * 24 <= timestamp <= 60 * 60 * 24 * 3:
        days = timestamp / (60 * 60 * 24)
        return "%s天前" % int(days)
    else:
        return datetime.strftime("%Y-%m-%d %H:%M")

   

   

很赞哦!(10)

文章评论