3

カスタム テンプレート タグを作成しました。

from django import template
from lea.models import Picture, SizeCache
register = template.Library()

@register.simple_tag
def rpic(picture, width, height, crop=False):
    return SizeCache.objects.get_or_create(width=width, height=height, picture=picture, crop=crop)[0].image_field.url

これは、オプションのパラメーターのトリミングを除いて機能します。オプションのパラメーターは設定できますが、関数によって無視され、常に False に設定されます。

4

1 に答える 1

4

simple_tagPython の呼び出しと同様に動作します。

テンプレートでリテラルを渡す場合、True名前付きの変数として扱われ、Trueテンプレート コンテキストで検索されます。Trueが定義されていない場合、フィールドが である限り、値は Django によって''強制されます。Falsecropmodels.BooleanField

例えば、

foo/templatetags/foo.py で

from django import template
register = template.Library()

def test(x, y=False, **kwargs):
    return unicode(locals())

シェルで

>>> from django.template import Template, Context
>>> t = Template("{% load foo %}{% test 1 True z=42 %}")
>>> print t.render(Context())
{'y': '', 'x': 1, 'kwargs': {'z': 42}}

# you could define True in context
>>> print t.render(Context({'True':True}))
{'y': True, 'x': 1, 'kwargs': {'z': 42}}

# Also you could use other value such as 1 or 'True' which could be coerced to True
>>> t = Template("{% load foo %}{% test 1 1 z=42 %}")
>>> print t.render(Context())
{'y': 1, 'x': 1, 'kwargs': {'z': 42}}
>>> t = Template("{% load foo %}{% test 1 'True' z=42 %}")
>>> print t.render(Context())
{'y': 'True', 'x': 1, 'kwargs': {'z': 42}}
于 2012-05-15T12:37:34.177 に答える