web-dev-qa-db-de.com

Django - Hast du das Registrieren oder Laden dieses Tags vergessen?

Ich habe ein benutzerdefiniertes Tag erstellt, das ich verwenden möchte, aber Django scheint es nicht zu finden. Mein templatetags-Verzeichnis ist folgendermaßen eingerichtet:

 

pygementize.py

from pygments import highlight
from pygments.lexers import get_lexer_by_name
from Django import template
from pygments.formatters.other import NullFormatter

register = template.Library()

@register.tag(name='code')
def do_code(parser,token):
    code = token.split_contents()[-1]
    nodelist = parser.parse(('endcode',))
    parser.delete_first_token()
    return CodeNode(code,nodelist)

class CodeNode(template.Node):
    def __init__(self,lang,code):
        self.lang = lang
        self.nodelist = code

    def render(self,context):
        code = self.nodelist.render(context)
        lexer = get_lexer_by_name('python')
        return highlight(code,lexer,NullFormatter())

Ich versuche, dieses Tag zu verwenden, um Code in gameprofile.html zu rendern.

gameprofile.html

(% load pygmentize %}
{% block content %}
    <title>{% block title %} | {{ game.title }}{% endblock %}</title>
    <div id="gamecodecontainer">
        {% code %}
            {{game.code}}
        {% endcode %}
    </div>
{% endblock content %}

Wenn ich zu gameprofile.html navigiere, erhalte ich eine Fehlermeldung:

Ungültiger Blocktag in Zeile 23: 'Code', erwarteter 'Endblock'. Haben Sie vergessen, diesen Tag zu registrieren oder zu laden?

5
123

hast du das probiert

{% load games_tags %} 

an der Spitze statt pygementize? 

9
losee

Der Fehler befindet sich in dieser Zeile: (% load pygmentize %}, ein ungültiges Tag . Ändern Sie es in {% load pygmentize %}.

6
Erick M

Ich hatte das gleiche Problem, wie ich es gelöst habe. Nach dem ersten Abschnitt von diesem sehr guten Django-Tutorial habe ich Folgendes getan:

  1. Erstellen Sie eine neue Django-App, indem Sie Folgendes ausführen: python manage.py startapp new_app
  2. Bearbeiten Sie die settings.py-Datei und fügen Sie der Liste von INSTALLED_APPS Folgendes hinzu: 'new_app',
  3. Fügen Sie dem new_app-Paket ein neues Modul mit dem Namen new_app_tags hinzu.
  4. Fügen Sie in einer Django-HTML-Vorlage am Anfang der Datei Folgendes hinzu, jedoch nach {% extends 'base_template_name.html' %}: {% load new_app_tags %}
  5. Erstellen Sie in der new_app_tags-Moduldatei ein benutzerdefiniertes Vorlagen-Tag (siehe unten).
  6. Verwenden Sie in derselben Django-HTML-Vorlage ab Schritt 4 Ihr glänzendes neues benutzerdefiniertes Tag wie folgt: {% multiply_by_two | "5.0" %}
  7. Feiern!

Beispiel aus Schritt 5 oben:

from Django import template

register = template.Library()

@register.simple_tag
def multiply_by_two(value):
    return float(value) * 2.0
2
MikeyE

Ändern Sie in gameprofile.html das Tag {% endblock content %} in {% endblock %}, damit es funktioniert. Andernfalls lädt Django denendblocknicht und gibt einen Fehler aus.

0
Pardhu Saradhi

Du musst dich ändern:

{% endblock content %}

zu 

{% endblock %}
0
Rahul Nama

Die App, die die benutzerdefinierten Tags enthält, muss sich in INSTALLED_APPS befinden. Sind Sie sicher, dass sich Ihr Verzeichnis in INSTALLED_APPS befindet?

Aus der Dokumentation :

Die App, die die benutzerdefinierten Tags enthält, muss sich in INSTALLED_APPS befinden, damit das {% load %}-Tag funktioniert. Dies ist eine Sicherheitsfunktion: Mit dieser Funktion können Sie Python-Code für viele Vorlagenbibliotheken auf einem einzelnen Host-Computer hosten, ohne bei jeder Django-Installation auf alle zugreifen zu müssen.

0
Ahmed Hosny