0

Ich versuche, einen eigene Template-Tag zu verwenden, und es gibt mir diese Fehlermeldung, wenn ich versuche, eine gerenderte Seite zu erhalten:Django eigene Template-Tag einen Fehler werfen

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

Ich versuche, ein zu bekommen Einfacher Titel für meine Flash-Nachrichten basierend auf {{message.tags}} und in meiner Vorlage fett machen. Wo mache ich einen Fehler?

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> 

Antwort

1

von Django Dokumentation: Simple Tags

Um die Erstellung von Tags zu erleichtern, die eine Reihe von Argumenten entgegennehmen - Strings oder Template-Variablen - und ein Ergebnis zurück, nachdem einige Verarbeitung zu tun basierte ausschließlich auf dem Eingabeargument und einige externe Informationen, Django bietet eine Hilfsfunktion, simple_tag. Diese Funktion, die eine Methode von django.template.Library ist, nimmt eine Funktion an, die eine beliebige Anzahl von Argumenten akzeptiert, sie in eine Renderfunktion und die anderen oben erwähnten notwendigen Bits umschließt und sie mit dem Vorlagensystem registriert.

So war das Problem nur eine Zeile, die über der Definition des Tags sollen:

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

Sie den Dekorateur @register.simple_tag auf die Funktion hinzufügen sollten und es auf diese Weise verwenden:

{% get_message_print_tag message.tags %} 

insa d von

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

Ich habe dies versucht, und ich bin immer noch die gleichen Fehler – Ibo

+0

Selbst wenn ich 'ersetzen {{message.tags }} 'mit' 'Erfolg'' es wirft den gleichen Fehler, was bedeutet, was Sie erwähnt, ist nicht das Problem – Ibo

+1

, was Sie zeigten, war ein Problem auch, aber ich erkannte es nach der Lösung des ersten Problems! – Ibo