0

Je suis en train d'utiliser une étiquette de modèle personnalisé et il me donne cette erreur quand je suis en train d'obtenir une page rendu:tag modèle Django personnalisé lancer une erreur

Invalid block tag on line 29: 'get_message_print_tag', expected 'empty' or 'endfor'. Did you forget to register or load this tag?

Je suis en train d'obtenir un titre simple pour mes messages instantanés basés sur {{message.tags}} et le rendre gras dans mon modèle. Où est-ce que je fais une erreur?

apptags.py:

from django import template 
register = template.Library() 


def get_message_print_tag(value): 
    '''return a string for a message tag depending on the 
     message tag that can be displayed bold on the flash message''' 
    if 'danger' in value.lower(): 
     return 'ERROR' 
    elif 'success' in value.lower(): 
     return 'SUCCESS' 
    else: 
     return 'NOTE' 

html:

{% load apptags %} 

     <div class="bootstrap-iso"> 
     {% if messages %} 
      <div class="messages "> 
       {% for message in messages %} 
        <div {% if message.tags %} class="alert {{ message.tags }} alert-dismissible" role="alert" {% endif %}> 
         {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Error: {% endif %} 


         <strong> {% get_message_print_tag {{message.tags}} %} </strong> 
         {{ message }} 
         <a href="#" class="close" data-dismiss="alert" aria-label="close">×</a> 

        </div> 
       {% endfor %}    
      </div> 
     {% endif %} 
     </div> 

Répondre

1

de la documentation Django: Simple Tags

Pour faciliter la création de balises qui prennent un certain nombre d'arguments - des chaînes ou des variables de modèle - et retourner un résultat après avoir fait un certain traitement basé uniquement sur les arguments d'entrée et certaines informations externes, Django fournit une fonction d'assistance, simple_tag. Cette fonction, qui est une méthode de django.template.Library, prend une fonction qui accepte n'importe quel nombre d'arguments, l'enveloppe dans une fonction de rendu et les autres bits nécessaires mentionnés ci-dessus et l'enregistre avec le système de gabarit.

Le problème était qu'une seule ligne qui devrait être au-dessus de la définition de l'étiquette:

from django import template 
register = template.Library() 

@register.simple_tag 
def get_message_print_tag(value): 
    '''return a string for a message tag depending on the 
     message tag that can be displayed bold on the flash message''' 
    if 'danger' in value.lower(): 
     return 'ERROR' 
    elif 'success' in value.lower(): 
     return 'SUCCESS' 
    else: 
     return 'NOTE' 
1

Vous devez ajouter le décorateur @register.simple_tag à la fonction et de l'utiliser de cette façon:

{% get_message_print_tag message.tags %} 

instea d de

{% get_message_print_tag {{message.tags}} %} 
+0

J'ai essayé et je reçois toujours la même erreur – Ibo

+0

Même quand je remplace '{{message.tags }} 'avec' 'succès'' il lance la même erreur, ce qui signifie que ce que vous avez mentionné n'est pas le problème – Ibo

+1

ce que vous avez pointé était un problème aussi, je l'ai réalisé après avoir résolu le premier problème! – Ibo