2011-10-18 44 views
0

payment-tags.pyDjango的自定義模板標籤:渲染方法不叫

@register.simple_tag 
def has_purchased(user_id): 
    payments = Payment.objects.all(user__id=user_id) 
    return PaymentObjects(payments) 

class PaymentObjects(template.Node): 
    def __init__(self, payments): 
    print 'inside init' 
    self.payments_obj = payments 

    def render(self, context): 
    print 'inside render' 
    context['payments'] = self.payments_obj 
    return '' 

Indside HTML:

{% load payment-tags %} 
{% has_purchased request.user.id %} 

渲染PaymentObjects類從未被調用的方法,這是不言而喻的初始化函數裏面但不是內部渲染..

我已經在谷歌搜索這個問題,但沒有得到任何滿意的答案,可以解決這個問題。

任何意見將不勝感激,謝謝。

回答

2

register.simple_tag用於立即返回結果的標記函數(Django爲您創建節點)。如果您想要返回自己的節點,請改爲使用register.tag

+0

感謝您的回答,但在這種情況下,我應該如何發送我需要發送的參數,即request.user.id,因爲當我將其更改爲標記時會給出錯誤「has_purchased()只需要1個參數(2給出)「 – Neo

+0

@Neo:你需要自己解析參數。標籤有兩個參數,'parser'和'token'。 [閱讀文檔](https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#writing-custom-template-tags)。 –

+0

非常感謝.. :) – Neo