Using Crispy Forms with Django, I can only get a TemplateDoesNotExist
error when using any feature of Crispy Forms.
As I'm new to Crispy Forms (which seems to be universally recommended for quickly making forms look better), I have followed the instructions at https://django-crispy-forms.readthedocs.io/en/latest/install.html and as far as I know, the installation is correct (installed using pip
and changes in settings.py
). I am running this in a virtual environment (the .venv
folder referred to below) on a Windows machine.
I have even created a new project specifically to look at this, with absolutely minimal content, and the same problem persists. The project is called 'stuff' and the single app in it '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'
...
models.py
from django.db import models
class Mine(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
forms.py
from django import forms
from .models import Mine
class MineForm(forms.ModelForm):
class Meta:
model = Mine
fields = ('name','email')
views.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>
results of pip freeze
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
error reported on debug page
TemplateDoesNotExist at /
bootstrap4/uni_form.html
Template-loader postmortem
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)
It looks to me like Crispy can't see the templates which should have been installed. Or perhaps there's something else I'm supposed to download or create?
I wanted to quickly tidy a form up in my Django project before moving on to more pressing matters, and hours later I still can't get Crispy Forms to function at all (it would have been quicker to sort this in other ways). It's clear I'm missing something, but what?
Other Weird and Wonderful things I've tried
Not all of these might be logical, but hey!
CRISPY_TEMPLATE_PACK
-- this results in an error suggesting I need to use bootstrap3
, bootstrap4
, or uni_form
. Although repeating this experiment keeps the error reported above (with the misspelling)django-bootstrap4
module and loading from CDN (no difference){% crispy aform %}
- same resultAs of django-crispy-forms 2.0 the template packs are now in separate packages.
You will need to pip install crispy-bootstrap4
and add crispy_bootstrap4
to your list of INSTALLED_APPS
.