如何在Django中获取自定义模板标签的可选参数?

时间:2012-05-15 09:03:34

标签: django templates django-1.4

我刚刚创建了一个自定义模板标记。

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。

1 个答案:

答案 0 :(得分:4)

simple_tag可以像Python一样调用。

如果您在模板中传递文字True,则会将其视为名为True的变量,并在模板上下文中进行搜索。如果未定义True,则只要''字段为False,该值就会变为crop并由Django强制为models.BooleanField

例如,

在foo / templatetags / foo.py

from django import template
register = template.Library()

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

>>> 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}}