«Неверный фильтр: ошибка 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.

Так где же в шаблоне стоит .fields|length_is:'1'?

willeM_ Van Onsem 15.08.2024 13:55

Фильтр length_is устарел с версии Django 4.2 и окончательно удален в версии 5.1.

John Gordon 15.08.2024 14:18

Как это исправить?

Luka Guledani 15.08.2024 14:27

Три варианта. Во-первых, создайте свой собственный тег шаблона . Во-вторых, выполните логику в вашем представлении и отправьте результат в контексте. В-третьих, конечно, нужно перейти на Django 4.2 (не рекомендуется!).

raphael 15.08.2024 14:33

Исправлено, речь идет о совместимости между django5.1 и Jazzmin, особенно length_is. Установлена ​​версия Джанго 5.0.

Luka Guledani 15.08.2024 16:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Другие вопросы по теме