2012-05-15 92 views
1

我剛創建了一個自定義模板標籤。如何在Django中獲取自定義模板標籤的可選參數?

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。

+0

提供模板代碼,你是如何設置可選參數在模板中? –

回答

4

simple_tag作爲Python調用類似。

如果您在模板中傳遞文字True,它將被視爲名爲True的變量並在模板上下文中進行搜索。如果沒有定義True,則只要crop字段爲models.BooleanField,則該值將變爲''並被Django強制爲False

例如,

在富/ 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}} 
+0

非常感謝你:) – JasonTS

相關問題