«Неверный фильтр: ошибка length_is в шаблоне Django – как исправить?»

Я сталкиваюсь с ошибкой TemplateSyntaxError в своем проекте Django при рендеринге шаблона. Я вижу сообщение об ошибке: TemplateSyntaxError at

/admin/dashboard/program/add/
           Invalid filter: 'length_is'
Django Version: 5.1
Python Version: 3.12.4
Error Location: This error appears in a Django template at line 22 of the fieldset.html file.

{% for line in fieldset %}
<div class = "form-group{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">
    <div class = "row">
        {% for field in line %}
        <label class = "{% if not line.fields|length_is:'1' and forloop.counter != 1 %}col-auto {% else %}col-sm-3 {% endif %}text-left" for = "id_{{ field.field.name }}">
            {{ field.field.label|capfirst }}
            {% if field.field.field.required %}
            <span class = "text-red">* </span>
            {% endif %}
        </label>
        <div class = "{% if not line.fields|length_is:'1' %} col-auto  fieldBox {% else %} col-sm-7 {% endif %}
                     {% if field.field.name %} field-{{ field.field.name }}{% endif %}">

Что я пробовал:

Проверено наличие пользовательских фильтров:

Я проверил свой проект и установленные в нем пакеты, чтобы проверить, существует ли собственный фильтр с именем length_is. Я обнаружил, что в моем проекте такой пользовательский фильтр не определен.

Проверенная установка Django:

Я убедился, что Django правильно установлен и обновлен до версии 5.1.

Рассмотренный код шаблона:

Я внимательно изучил код шаблона, вызывающий ошибку. Я обнаружил, что используется line.fields|length_is:'1', но фильтр length_is не является стандартным фильтром Django.

Поиск ошибок пакета:

Я просмотрел документацию и отчеты об ошибках, связанные с django-jazzmin, чтобы узнать, есть ли какие-либо упоминания о проблеме с фильтром length_is, но не смог найти соответствующей информации.

Чего я ожидал:

Я ожидал найти либо:

Документация или ссылка, указывающая, что length_is — это стандартный фильтр Django или фильтр, предоставляемый внешним пакетом. Руководство по определению или реализации фильтра length_is, если это пользовательский фильтр, не включенный по умолчанию.

Разрешение, указывающее, что проблема может быть связана с несоответствием версий или проблемой конфигурации, которую можно легко решить.

Поскольку мне не удалось найти никакой полезной информации или документации об этом фильтре, я не знаю, что делать. Будем очень признательны за любую помощь по определению или правильному использованию фильтра length_is в шаблонах Django.

🤔 А знаете ли вы, что...
Python подходит для начинающих программистов благодаря своей простоте и читаемости кода.


1
160
1

Ответ:

Решено

Я столкнулся с той же проблемой с Django Jazzmin, когда обновил свою версию Django. Вот как это исправить.

Шаг 1. Создайте файл customtags.py в папке одного из ваших приложений.

myapp/templatetags/customtags.py

Шаг 2. Вставьте код length_is из репозитория Django на GitHub

Шаг 3. Добавьте относительный путь к файлу пользовательских тегов в файл settings. В разделе TEMPLATES.

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                "django.template.context_processors.media",
                "django.template.context_processors.i18n",
            ],
            "builtins": ["myapp.templatetags.customtags"], # <- HERE
        },
    },
]

Источник: Как исправить удаленные теги шаблона в администраторе Django