Django возвращает «TemplateDoesNotExist» при использовании Crispy Forms

Используя Crispy Forms с Django, я могу получить ошибку TemplateDoesNotExist только при использовании любой функции Crispy Forms.

Поскольку я новичок в Crispy Forms (который, кажется, повсеместно рекомендуется для быстрого улучшения внешнего вида форм), я следовал инструкциям на https://django-crispy-forms.readthedocs.io/en/latest/install. .html и, насколько я знаю, установка правильная (устанавливается с помощью pip и изменяется в settings.py). Я запускаю это в виртуальной среде (папка .venv, упомянутая ниже) на компьютере с Windows.

Я даже создал новый проект специально, чтобы посмотреть на это, с абсолютно минимальным содержанием, и та же проблема сохраняется. Проект называется «stuff», а единственное приложение в нем — «other».

settings.py

...

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
    'other',
    'bootstrap4'
]

CRISPY_TEMPLATE_PACK = 'bootstrap4'

...

модели.py

from django.db import models

class Mine(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

формы.py

from django import forms
from .models import Mine

class MineForm(forms.ModelForm):
    class Meta:
        model = Mine
        fields = ('name','email')

просмотры.py

from django.shortcuts import render
from .forms import *

def idx(request):
    tform = MineForm()

    return render(request,'test.html',{'aform': tform})

test.html

{% load bootstrap4 %}
{% load crispy_forms_tags %}
<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>TestThing</title>
</head>
<body>
    <form action = "/">
        {% csrf_token %}
        {{ aform|crispy }}
    </form>
</body>
</html>

результаты заморозки пипсов

asgiref==3.6.0
beautifulsoup4==4.11.2
Django==4.1.7
django-bootstrap4==22.3
django-crispy-forms==2.0
soupsieve==2.4
sqlparse==0.4.3
tzdata==2022.7

сообщение об ошибке на странице отладки

TemplateDoesNotExist at /
bootstrap4/uni_form.html

Вскрытие загрузчика шаблонов

Template-loader postmortem
Django tried loading these templates, in this order:

Using engine django:

django.template.loaders.app_directories.Loader: C:\ProjectDir\.venv\lib\site-packages\django\contrib\admin\templates\bootstrap4\uni_form.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\ProjectDir\.venv\lib\site-packages\django\contrib\auth\templates\bootstrap4\uni_form.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\ProjectDir\other\templates\bootstrap4\uni_form.html (Source does not exist)
django.template.loaders.app_directories.Loader: C:\ProjectDir\.venv\lib\site-packages\bootstrap4\templates\bootstrap4\uni_form.html (Source does not exist)

Мне кажется, что Криспи не видит шаблоны, которые должны были быть установлены. Или, возможно, есть что-то еще, что я должен загрузить или создать?

Я хотел быстро привести в порядок форму в своем проекте Django, прежде чем переходить к более насущным вопросам, и спустя несколько часов я все еще не могу заставить Crispy Forms работать вообще (было бы быстрее отсортировать это другими способами). Понятно, что я что-то упускаю, но что?

Другие странные и замечательные вещи, которые я пробовал

Не все из них могут быть логичными, но эй!

  • преднамеренно помещая неправильную строку в CRISPY_TEMPLATE_PACK - это приводит к ошибке, предполагающей, что мне нужно использовать bootstrap3, bootstrap4 или uni_form. Хотя повторение этого эксперимента сохраняет указанную выше ошибку (с орфографической ошибкой)
  • удаление модуля django-bootstrap4 и загрузка с CDN (без разницы)
  • создание пустого HTML-файла по пути, указанному для шаблона, который просто не может отобразить форму
  • используя {% crispy aform %} - тот же результат

Ошибка в нижней части сообщения сообщает вам обо всех каталогах, в которых он искал и не мог найти шаблон. Итак, каково фактическое местоположение шаблона?

John Gordon 18.02.2023 20:13

@john К сожалению, он ищет файл uni_form.html, который является частью системы Crispy Forms. Создание пустого файла с таким именем по одному из этих путей устраняет ошибку и отображает страницу без формы. Все ссылки, которые я нашел до сих пор на Crispy Forms, похоже, предлагают выполнить установку pip, установить в проекте и использовать тег {% load crispy_forms_tags %} в верхней части шаблона с передачей формы через crispy. Не было предложено вручную создать файл шаблона или установить его из другого места.

Dave 18.02.2023 22:37

Проблема все еще существует, когда вы удаляете bootstrap4 pip uninstall bootstrap4 и удаляете его из своего INSTALLED_APPS?

Marco 19.02.2023 01:11

@Marco К сожалению, он сохраняется даже при этом (и, очевидно, при загрузке начальной загрузки вручную)

Dave 19.02.2023 06:24

Вы установили для APP_DIRS значение True в переменной TEMPLATE в settings.py? Попробуйте установить значение False. В моем проекте было установлено значение False, чтобы Django не просматривал местоположения по умолчанию в каждом приложении с избыточностью, поскольку все мои шаблоны и статический файл живут на уровне проекта. Кстати, я использую bootstrap5, загруженный локально, а не встроенный пакет django. Во всяком случае, у меня была такая же ошибка, и изменение обратно на False решило мою проблему.

udarH3 19.02.2023 13:53
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Начиная с django-crispy-forms 2.0, пакеты шаблонов теперь находятся в отдельных пакетах.

Вам нужно будет pip install crispy-bootstrap4 и добавить crispy_boostrap4 в свой список INSTALLED_APPS.

Спасибо - это точно решение. Я еще раз посмотрел и не вижу ничего, указывающего в этом направлении на сайте Crispy Forms (на самом деле там написано: «Начиная с версии 2.0, django-crispy-forms имеет встроенную поддержку версий 3 и 4 Bootstrap CSS-фреймворк").

Dave 19.02.2023 22:45

Большое спасибо! Я был так невежествен с этим. Мерси :)

LaurentP13 21.02.2023 17:16

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