Проблема с использованием пользовательского тега правильно с Django - PullRequest
0 голосов
/ 24 февраля 2019

Сводка

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

Индексный файл выглядит для загрузки правильно, он просто жалуется на то, что тег зарегистрирован неправильно.

Сейчас я просто поместил файл .py, где я регистрирую тег, внутри приложения, которое находится в части установленных приложений django.

Должен ли я делать что-то еще для обеспечения правильной регистрации тега?


Дополнительная информация

Полученная ошибка:

Недопустимый тег блока в строке 1: 'show_loans'.Вы забыли зарегистрировать или загрузить этот тег?

Вид, где я называю тег

index.html

{% show_loans %}

Файл Python, в котором я пытаюсь зарегистрировать тег

loanTable.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}

loanTable.html

<ul>
    {% for loan in loans %}
        <li> {{ loan }} </li>
    {% endfor %}
</ul>

Структура папки:

-app
--templates
---customTemplates
----index.html
----loansTable.html
--loansTable.py

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Ошибка говорит вам точно, что не так: вы не загрузили тег в шаблон, где вы его используете, т.е. index.html.

{% load loansTable %}
{% show_loans %}

Кроме того, вы путаете ваши типы тегов.Тег, который отображает другой шаблон, называется тегом включения, поэтому его следует использовать при регистрации:

@register.inclusion_tag('loansTable.html')
def show_loans():
    ...
0 голосов
/ 24 февраля 2019

Вам не нужно регистрировать свой тег в шаблоне.Вам просто нужно загрузить его оттуда.Что вы уже делаете.

Поэтому просто замените:

@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.

...