Проблема с использованием пользовательского тега правильно с Django
Резюме
Я пытался заставить пользовательский тег работать в Django, но, похоже, он не будет правильно регистрироваться.
Индексный файл выглядит для загрузки правильно, он просто жалуется на то, что тег зарегистрирован неправильно.
Сейчас я просто поместил файл.py, где я регистрирую тег, внутри приложения, которое находится в части установленных приложений django.
Должен ли я делать что-то еще, чтобы тег регистрировался правильно?
Дальнейшая информация
Ошибка, которую я получаю:
Недопустимый тег блока в строке 1: "show_loans". Вы забыли зарегистрироваться или загрузить этот тег?
Вид, где я называю тег
index.html
{% show_loans %}
Файл Python, где я пытаюсь зарегистрировать тег
loansTable.py
from .models import Loan
from datetime import datetime
from django import template
register = template.Library()
@register.simple_tag('loansTable.html')
def show_loans():
l1 = Loan()
l2 = Loan()
l1.loanedDate_date = datetime.now
l2.handinDate_date = datetime.now
l2.loanedDate_date = datetime.now
l2.handinDate_date = datetime.now
loans2 = { l1, l2 }
return {'loans': loans2}
loansTable.html
<ul>
{% for loan in loans %}
<li> {{ loan }} </li>
{% endfor %}
</ul>
Структура папки:
-app
--templates
---customTemplates
----index.html
----loansTable.html
--loansTable.py
Спасибо за вашу помощь.
2 ответа
Вам не нужно регистрировать свой тег в шаблоне. Вам просто нужно загрузить его оттуда. Что вы уже делаете.
Поэтому просто замените:
@register.simple_tag('loansTable.html')
С этим:
@register.simple_tag
Вы также должны поместить свои пользовательские теги в templatetags
каталог. Из документов:
В ваш index.html вы должны загружать теги шаблона по имени файла, в котором вы зарегистрировали теги шаблона. т.е. если вы зарегистрировали тег внутри custom_tags.py
файл
{% load custom_tags %}
Приложение должно содержать каталог templatetags на том же уровне, что и models.py, views.py и т. Д. Если его еще нет, создайте его - не забудьте файл init.py, чтобы убедиться, что каталог обрабатывается как пакет Python.
Ошибка говорит вам точно, что не так: вы не загрузили тег в шаблоне, где вы его используете, т.е. index.html.
{% load loansTable %}
{% show_loans %}
Кроме того, вы путаете ваши типы тегов. Тег, который отображает другой шаблон, называется тегом включения, поэтому его следует использовать при регистрации:
@register.inclusion_tag('loansTable.html')
def show_loans():
...