学习日记之《Django3 Web应用开发实战》——第六章——深入模板

第六章——深入模板

自定义模板标签和自定义过滤器

# 项目目录下自定义文件夹如mytags,在mytags下创建templatestags(固定)文件夹,创建自定义标签功能
from django import template

# 创建模板对象
register = template.Library()

# 定义模板节点类
class ReversalNode(template.Node):
    def __init__(self, value):
        self.value = str(value)

    def render(self, context):
        return self.value[::-1]

# 声明并定义标签
# parse:解析器对象, token:被解析的对象
@register.tag(name='reversal')
def do_reversal(parse, token):
    try:
        tag_name, value = token.split_contents()
        # tag_name: 标签名   value: 标签传递的数据
    except:
        raise template.TemplateSyntaxError('syntax')
    # 调用自定义的模板节点类
    return ReversalNode(value)


@register.filter(name='replace')
def do_replace(value, args):
    oldvalue = args.split(':')[0]
    newvalue = args.split(':')[1]
    return value.replace(oldvalue, newvalue)

# 模板文件前load 自定义标签
<!DOCTYPE html>
{% load custom_tags %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% reversal 'Django' %}   # 自定义标签
{{ value | replace:'Python:Django' }}  # 自定义过滤器
</body>
</html>

Jinja2模板引擎

pip3 install Jinja2
# 和settings.py 同目录创建jinja2_cus.py, 作用:将jinja2模板加载到django 项目中
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
from jinja2 import Environment

# 将jinja2 模板设置到项目环境
def environment(**option):
    env = Environment(**option)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
    })
    return env
settings.py
TEMPLATES = [
    # 使用jinja2 模板引擎
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [BASE_DIR, 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'environment': 'web_test.jinja2_tem.environment',
        },
    },
    # 使用Django模板引擎
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

jinja 自定义过滤器

# 和settings.py 同目录创建jinja2_cus.py, 
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
from jinja2 import Environment

def myreplace(value, old='jinja2', new='django'):
    return str(value).replace(old, new)

# 将jinja2 模板设置到项目环境
def environment(**option):
    env = Environment(**option)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
    })
    # 注册自定义过滤器
    env.filters['myreplace'] = myreplace
    return env

最近更新

  1. leetcode705-Design HashSet

    2024-04-01 15:18:02       5 阅读
  2. Unity发布webgl之后打开streamingAssets中的html文件

    2024-04-01 15:18:02       5 阅读
  3. vue3、vue2中nextTick源码解析

    2024-04-01 15:18:02       6 阅读
  4. 高级IO——React服务器简单实现

    2024-04-01 15:18:02       5 阅读
  5. 将图片数据转换为张量(Go并发处理)

    2024-04-01 15:18:02       4 阅读
  6. go第三方库go.uber.org介绍

    2024-04-01 15:18:02       6 阅读
  7. 前后端AES对称加密 前端TS 后端Go

    2024-04-01 15:18:02       7 阅读

热门阅读

  1. day14-二叉树part01(递归法/迭代法)

    2024-04-01 15:18:02       5 阅读
  2. How to use pandoc in Ubuntu 22.04

    2024-04-01 15:18:02       5 阅读
  3. 缓存的常见问题及其解法

    2024-04-01 15:18:02       4 阅读
  4. 巧克力(蓝桥杯)

    2024-04-01 15:18:02       3 阅读
  5. 本学期学习计划

    2024-04-01 15:18:02       4 阅读
  6. 【Docker笔记06】【容器编排】

    2024-04-01 15:18:02       3 阅读
  7. Qt 中 :deleteLater 总结

    2024-04-01 15:18:02       4 阅读
  8. VLAN配置及原理

    2024-04-01 15:18:02       4 阅读
  9. 网络常见的端口号

    2024-04-01 15:18:02       4 阅读