2011-10-18 3 views
0

payment-tags.pydjango balises de modèle personnalisé: méthode render pas appelé

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

La méthode render de PaymentObjects classe ne est jamais appelée, il va à l'intérieur de la fonction init mais pas à l'intérieur de rendre ..

J'avais cherché ce problème sur google mais n'ai eu aucune réponse satisfaisante qui peut résoudre le problème.

Un conseil serait grandement apprécié, merci.

Répondre

2

register.simple_tag est utilisé pour les fonctions de tag qui retournent immédiatement le résultat (Django crée le nœud pour vous). Si vous souhaitez renvoyer votre propre noeud, utilisez plutôt register.tag.

+0

Merci pour la réponse, mais dans ce cas, comment dois-je envoyer le paramètre que je dois envoyer ie request.user.id, comme quand je le change pour marquer il donne erreur "has_purchased() prend exactement 1 argument (2 donné) " – Neo

+0

@Neo: Vous devez analyser les arguments vous-même. Les balises ont deux arguments, 'parser' et' token'. [Lire les documents] (https://docs.djangoproject.com/fr/1.3/howto/custom-template-tags/#writing-custom-template-tags). –

+0

Merci beaucoup .. :) – Neo

Questions connexes