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.defaulttags
ありdjango.template.defaultfilters
ます。
Jinja2 に新しいテンプレート フィルターを定義する方法がある場合 (おそらくそうです)、手作りのテンプレート フィルターを実際の Django 関数に単純にラップできます。
したがって、基本的には、実際の Django 関数定義を指す Jinja2 フィルターを作成するだけです。
編集: 実際の Django 関数にアクセスできない場合は、ソース コードをコピーして貼り付け、Django 固有のものを削除または適応させてください。
escapejs
フィルターは、実際には次の関数の呼び出しです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