it-swarm.com.ru

Django - Вы забыли зарегистрироваться или загрузить этот тег?

Я создал собственный тег, который хочу использовать, но Django не может его найти. Моя папка templatetags настроена так:

 

pygmentize.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())

Я пытаюсь использовать этот тег для отображения кода в gameprofile.html.

gameprofile.html

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

Когда я перехожу к gameprofile.html, я получаю сообщение об ошибке:

Недопустимый тег блока в строке 23: «код», ожидаемый «конечный блок». Вы забыли зарегистрироваться или загрузить этот тег?

5
123

ты пробовал это

{% load games_tags %} 

наверху вместо пигментирования? 

9
losee

Ошибка в этой строке: (% load pygmentize %}, недопустимый тег . Измените его на {% load pygmentize %}

6
Erick M

У меня была такая же проблема, вот как я ее решил. Следуя первому разделу это очень хорошее руководство по Django , я сделал следующее:

  1. Создайте новое приложение Django, выполнив: python manage.py startapp new_app
  2. Отредактируйте файл settings.py, добавив в список INSTALLED_APPS следующее: 'new_app',
  3. Добавьте новый модуль в пакет new_app с именем new_app_tags.
  4. В HTML-шаблон Django добавьте следующее в начало файла, но после {% extends 'base_template_name.html' %}: {% load new_app_tags %}
  5. В файле модуля new_app_tags создайте пользовательский тег шаблона (см. Ниже).
  6. В том же HTML-шаблоне Django, начиная с шага 4 выше, используйте свой новый блестящий тег, например, так: {% multiply_by_two | "5.0" %}
  7. Празднуйте!

Пример из шага 5 выше:

from Django import template

register = template.Library()

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

В gameprofile.html, пожалуйста, измените тег {% endblock content %} на {% endblock %}, тогда он будет работать, иначе Django не загрузит endblock и выдаст ошибку.

0
Pardhu Saradhi

Вам нужно изменить:

{% endblock content %}

в 

{% endblock %}
0
Rahul Nama

Приложение, содержащее пользовательские теги, должно быть в INSTALLED_APPS. Так вы уверены, что ваш каталог находится в INSTALLED_APPS?

Из документации :

Для работы тега INSTALLED_APPS приложение, содержащее пользовательские теги, должно быть в {% load %}. Это функция безопасности: она позволяет вам размещать код Python для множества библиотек шаблонов на одном хост-компьютере, не предоставляя доступ ко всем из них для каждой установки Django.

0
Ahmed Hosny