gpt4 book ai didi

python - 如何使用 Appengine SDK 将 Django 内置过滤器与 Jinja2 结合使用?

转载 作者:行者123 更新时间:2023-12-01 05:50:46 24 4
gpt4 key购买 nike

前一段时间我尝试了几种不同的方法,每种方法都给出了不同的异常,所以我放弃并决定在需要时手动编写过滤器。但我缺少 native escapejs 和其他有用但简单的过滤器。

有几个相关的问题和答案,但据我所知,没有一个提供无缝的方法来实现这一点。我想主要问题是 django 过滤器例程与 django 环境绑定(bind)太多。

仅当您设法在 Appengine SDK 环境中使用内置 django 过滤器时才请回答,根据我的经验,由于 Appengine 环境有限,因此与普通环境相比,这更困难

最佳答案

Django 模板引擎中的模板标签是接受值和参数的简单函数。它们都可以直接在源代码中访问。

这是 IPython 的输出:

In [173]: from django.template.defaultfilters import  date 

In [174]: date??
Type: function
String Form:<function date at 0xa2935f0>
File: /usr/local/python/thor/lib/python2.7/site-packages/django/template/defaultfilters.py
Definition: date(value, arg=None)
Source:
@register.filter(expects_localtime=True, is_safe=False)
def date(value, arg=None):
"""Formats a date according to the given format."""
if not value:
return u''
if arg is None:
arg = settings.DATE_FORMAT
try:
return formats.date_format(value, arg)
except AttributeError:
try:
return format(value, arg)
except AttributeError:
return ''

大多数 Django 特定的魔力都存在于装饰器 ( register.filter ) 中,以及当您键入 {% load <template library> %} 时语言解析调用的方式。在你的模板中。在 <module>.templatetags 中查找定义模块。内置程序位于 django.template.defaulttagsdjango.template.defaultfilters .

如果 Jinja2 有办法定义新的模板过滤器(它可能会这样做),那么您可以简单地将手工制作的模板过滤器包装到实际的 Django 函数中。

所以基本上,只需创建指向实际 Django 函数定义的 Jinja2 过滤器即可。

编辑:如果您无权访问实际的 Django 功能,只需复制粘贴源代码并删除或调整 Django 特定的内容即可。

escapejs filter实际上是对django.utils.html中这个函数的调用:

_base_js_escapes = (
('\\', r'\u005C'),
('\'', r'\u0027'),
('"', r'\u0022'),
('>', r'\u003E'),
('<', r'\u003C'),
('&', r'\u0026'),
('=', r'\u003D'),
('-', r'\u002D'),
(';', r'\u003B'),
(u'\u2028', r'\u2028'),
(u'\u2029', r'\u2029')
)

# Escape every ASCII character with a value less than 32.
_js_escapes = (_base_js_escapes +
tuple([('%c' % z, '\\u%04X' % z) for z in range(32)]))

def escapejs(value):
"""Hex encodes characters for use in JavaScript strings."""
for bad, good in _js_escapes:
value = mark_safe(force_unicode(value).replace(bad, good))
return value

关于python - 如何使用 Appengine SDK 将 Django 内置过滤器与 Jinja2 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com