在 Django 中使用 Jinja2 MemcachedBytecodeCache

Posted

技术标签:

【中文标题】在 Django 中使用 Jinja2 MemcachedBytecodeCache【英文标题】:Using Jinja2 MemcachedBytecodeCache With Django 【发布时间】:2020-08-04 14:26:33 【问题描述】:

如果这个答案很明显,我深表歉意,但我似乎无法弄清楚如何在 Django 中启用 Jinja2 的 MemcachedBytecodeCache(我使用的是 3.0 版,但通常两者都是)。 Jinja's documentation 听起来像是一个相对简单的设置:

class jinja2.MemcachedBytecodeCache(client, prefix='jinja2/bytecode/', timeout=None, ignore_memcache_errors=True)

这个类实现了一个字节码缓存,它使用 memcache 缓存来存储信息。它不强制执行特定的 memcache 库(tummy 的 memcache 或 cmemcache),但会接受任何提供所需最小接口的类。

显然,目标是使用 Memcached 启用 Jinja 的字节码缓存,我的站点上已经启用了该功能。在设置中实施此操作的任何帮助将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

要使用字节码缓存,请将其实例化并将其传递给环境:

from django.core.cache import cache
from jinja2 import Environment, MemcachedBytecodeCache

def environment(**options):
    bcc = MemcachedBytecodeCache(cache._cache, prefix='jinja2_bytecode_', timeout=3600, ignore_memcache_errors=True)
    env = Environment(trim_blocks=True, lstrip_blocks=True, bytecode_cache=bcc, **options)
    return env

把这段代码放在你的基本目录的jinja2_setup.py中,并在你的settings.py中实例化环境:

TEMPLATES = [
    'BACKEND': 'django.template.backends.jinja2.Jinja2',
     'DIRS': [os.path.join(BASE_DIR, 'jinja2'), ],
     'APP_DIRS': True,
     'OPTIONS': 'environment': "jinja2_setup.environment", 
    ,
]

【讨论】:

您能否提供更多有关其工作原理的背景信息?例如。 environment() 是怎么调用的,这段代码在哪里?

以上是关于在 Django 中使用 Jinja2 MemcachedBytecodeCache的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 和 Jinja2/Coffin 中使用 django-paging 扩展

在 Django 中使用 Jinja2 MemcachedBytecodeCache

在 jinja2 中使用 django 过滤器

在 Jinja2 模板中使用 DateTimeFields 显示本地时间 - Django

如何在脚本中使用 django-template 而不是 jinja2?

Jinja2 模板使用 Django 模板标签