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?
hast du das probiert
{% load games_tags %}
an der Spitze statt pygementize?
Der Fehler befindet sich in dieser Zeile: (% load pygmentize %}
, ein ungültiges Tag . Ändern Sie es in {% load pygmentize %}
.
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:
python manage.py startapp new_app
settings.py
-Datei und fügen Sie der Liste von INSTALLED_APPS
Folgendes hinzu: 'new_app',
new_app
-Paket ein neues Modul mit dem Namen new_app_tags
hinzu.{% extends 'base_template_name.html' %}
: {% load new_app_tags %}
new_app_tags
-Moduldatei ein benutzerdefiniertes Vorlagen-Tag (siehe unten).{% multiply_by_two | "5.0" %}
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
Ändern Sie in gameprofile.html
das Tag {% endblock content %}
in {% endblock %}
, damit es funktioniert. Andernfalls lädt Django denendblocknicht und gibt einen Fehler aus.
Du musst dich ändern:
{% endblock content %}
zu
{% endblock %}
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.