2011-07-26 5 views
0

code modèle:fonction personnalisée tag template ne pas appeler

{% extends 'some.html' %} 
{% load tag %} 
{% get_rate land contDetails.postcode contDetails.county title uid LsAff.aff_id LsAff.group_id %} 

tag template personnalisé:

from django import template 
from process.utils.error_handler import debug_logger 
from django.template import Library, Node, TemplateSyntaxError 
class land(template.Node): 
    def __init__(self, var): 
     self.varname = template.Variable(var) 
     debug_logger().info(self.varname) 

    def render(self, context): 
    debug_logger().info("hello") 
    user = self.varname.resolve(context) 
    debug_logger().info("hello") 
    debug_logger().info(user) 
    return "somestring" 

def get_rate(parser, token): 
    debug_logger().info("hell") 
    bits=token.split_contents() 
    var=bits[2] 
    debug_logger().info(var) 
    return land(var) 
register = template.Library() 
register.tag('get_rate', get_rate) 

Dans le code ci-dessus rendre def (auto, contexte): fonction ne demande pas. Jusqu'à debug_logger(). Info (self.varname) déclaration le code fonctionne correctement.

Ai-je raté quelque chose? s'il vous plaît aider à trouver la solution pour appeler rendre (auto, contexte)

+1

Pouvez-vous ajouter votre code de modèle? –

+1

des informations d'erreur supplémentaires? peut-être ajouter l'erreur entière? – cwoebker

+0

@cwoebker je ne reçois aucune erreur, il ne retourne rien.While débogage j'ai trouvé que la fonction de rendu n'est pas appelée. – shiva

Répondre

0

J'ai mis en place une fonction d'affichage rapide et répliqué votre tag. J'ai réduit le nombre d'arguments à deux pour la brièveté. Tout fonctionne bien pour moi.

#views.py 
from django.shortcuts import render 

def test_view(request): 
    return render(request, 'test.html', {'var' : True}) 

#tag.py 
from django import template 

register = template.Library() 

@register.tag('get_rate') 
def get_rate(parser, token): 
    bits = token.contents.split() 
    var = bits[2] 
    return LandNode(var) 

class LandNode(template.Node): 
    def __init__(self, var): 
     self.varname = template.Variable(var) 

    def render(self, context): 
     varname = self.varname.resolve(context) 
     return 'some string' 

#test.html 
{% load tag %} 
{% get_rate 'foo' var %} 

Renders:

some string 

je recommande la réduction de la signature de la méthode sur cette étiquette de modèle et juste passer dans des objets où vous passez dans plusieurs propriétés de l'objet.

Questions connexes