Я создаю регистрационную форму для своего проекта django, и для ее стилизации я использую хрустящие формы. Но когда я запускаю свой сервер и перехожу на страницу регистрации, я вижу эту ошибку:
Internal Server Error: /users/register/
Traceback (most recent call last):
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 988, in render
output = self.filter_expression.resolve(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 698, in resolve
new_obj = func(obj, *arg_vals)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\crispy_forms\templatetags\crispy_forms_filters.py", line 60, in as_crispy_form
template = uni_form_template(template_pack)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\crispy_forms\templatetags\crispy_forms_filters.py", line 21, in uni_form_template
return get_template("%s/uni_form.html" % template_pack)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\loader.py", line 19, in get_template
raise TemplateDoesNotExist(template_name, chain=chain)
django.template.exceptions.TemplateDoesNotExist: bootstrap5/uni_form.html
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Dell\Desktop\Django\microblog\microblog_project\users\views.py", line 17, in register
return render(request, 'users/register.html',context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\backends\django.py", line 63, in render
reraise(exc, self.backend)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\backends\django.py", line 84, in reraise
raise new from exc
django.template.exceptions.TemplateDoesNotExist: bootstrap5/uni_form.html
Это не похоже на обычное TemplateDoesNotExistError
Я понимаю. Я думаю, что это ошибка в моей хрустящей форме, потому что, если я уберу теги хрустящего шаблона в своей форме, все будет работать нормально.
Вот мой шаблон регистрации:
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block title %}Register{% endblock %}
{% block content %}
<h1>Sign up for a new account</h1>
<hr>
<form action = "" method = "post">
{% csrf_token %}
{{ form|crispy }}
<button type = "submit" class = "btn btn-sm btn-primary">Register</button>
</form>
<p>
Already have an account?
<a href = "#">Log in</a>
</p>
{% endblock %}
И на всякий случай, вот моя функция просмотра:
def register(request):
form = RegistrationForm()
if request.method == 'POST':
form = RegistrationForm(data=request.POST)
if form.is_valid():
form.save()
return HttpResponse("Successfully Registered!!!")
context = {
'form':form,
}
return render(request, 'users/register.html',context)
Я указал CRISPY_TEMPLATE_PACK в файле settings.py, а также добавил crispy_forms в свои INSTALLED_APPS. Где я ошибаюсь?
Обновлено:
Поэтому я немного больше исследовал эту тему, и эта ошибка, вероятно, связана с тем, что хрустящие формы еще не поддерживают начальную загрузку 5. Итак, изменив bootstrap5 на bootstrap4 в моем CRISPY_TEMPLATE_PACK, ошибка устранена.
CRISPY_TEMPLATE_PACK = 'bootstrap5'
Это линия
Судя по последнему документу хрустящей формы, кажется, что встроенного bootstrap5
для него нет. Вы уверены, что используете bootstrap5
?
В настоящее время есть только bootstrap, bootstrap3, bootstrap4 и uni-form.
Вы можете взглянуть на свою файловую структуру, если видите папку bootstrap5
.
Пакет шаблонов bootstrap 5 будет отдельным пакетом. На PyPI доступна очень ранняя версия, и вот ссылка на GitHub.
Как вы говорите, вы установили crispy_forms и добавили install_apps в settings.py. файл, то следующим шагом будет использование следующего кода: pip install crispy-bootstrap5 — в вашей командной строке
затем внесите некоторые изменения в файл settings.py следующим образом:
CRISPY_ALLOWED_TEMPLATE_PACKS = "начальная загрузка5"
CRISPY_TEMPLATE_PACK = "начальная загрузка5"
Я также столкнулся с этой проблемой, но хрустящая форма уже поддерживает boostrap 5. На их странице github было указано, что так
$ pip install django-crispy-forms
$ pip install crispy-bootstrap5
И в settings.py
INSTALLED_APPS = [
...,
'crispy_forms',
'crispy_bootstrap5', # Forgetting this was probably your error
]
А затем внизу страницы settings.py
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
CRISPY_TEMPLATE_PACK = "bootstrap5"
Это помогло мне решить ошибку TemplateDoesNotExist. Нет необходимости переходить на bootstrap4
в моем случае это сработало, я использовал bootstrap5.
В 2023 году (и далее) это правильный ответ на вопрос.
Начиная с django-crispy-forms 2.0, пакеты шаблонов теперь находятся в отдельных пакетах.
Вам нужно будет pip install crispy-bootstrap4
и добавить crispy_bootstrap4
в свой список INSTALLED_APPS.
Можете ли вы также опубликовать часть, в которой вы установили crispy_template_pack в settings.py?