Используя 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 (без разницы){% crispy aform %}
- тот же результат@john К сожалению, он ищет файл uni_form.html
, который является частью системы Crispy Forms. Создание пустого файла с таким именем по одному из этих путей устраняет ошибку и отображает страницу без формы. Все ссылки, которые я нашел до сих пор на Crispy Forms, похоже, предлагают выполнить установку pip, установить в проекте и использовать тег {% load crispy_forms_tags %}
в верхней части шаблона с передачей формы через crispy
. Не было предложено вручную создать файл шаблона или установить его из другого места.
Проблема все еще существует, когда вы удаляете bootstrap4 pip uninstall bootstrap4
и удаляете его из своего INSTALLED_APPS
?
@Marco К сожалению, он сохраняется даже при этом (и, очевидно, при загрузке начальной загрузки вручную)
Вы установили для APP_DIRS значение True в переменной TEMPLATE в settings.py? Попробуйте установить значение False. В моем проекте было установлено значение False, чтобы Django не просматривал местоположения по умолчанию в каждом приложении с избыточностью, поскольку все мои шаблоны и статический файл живут на уровне проекта. Кстати, я использую bootstrap5, загруженный локально, а не встроенный пакет django. Во всяком случае, у меня была такая же ошибка, и изменение обратно на False решило мою проблему.
Начиная с django-crispy-forms 2.0, пакеты шаблонов теперь находятся в отдельных пакетах.
Вам нужно будет pip install crispy-bootstrap4
и добавить crispy_boostrap4
в свой список INSTALLED_APPS
.
Спасибо - это точно решение. Я еще раз посмотрел и не вижу ничего, указывающего в этом направлении на сайте Crispy Forms (на самом деле там написано: «Начиная с версии 2.0, django-crispy-forms имеет встроенную поддержку версий 3 и 4 Bootstrap CSS-фреймворк").
Большое спасибо! Я был так невежествен с этим. Мерси :)
Ошибка в нижней части сообщения сообщает вам обо всех каталогах, в которых он искал и не мог найти шаблон. Итак, каково фактическое местоположение шаблона?