TemplateDoesNotExist в /users/register/bootstrap5/uni_form.html

Я создаю регистрационную форму для своего проекта 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 в settings.py?

Kaushal Sharma 10.12.2020 17:40
CRISPY_TEMPLATE_PACK = 'bootstrap5'
Samyak Jain 10.12.2020 17:43

Это линия

Samyak Jain 10.12.2020 17:43
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
9
3
10 487
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Судя по последнему документу хрустящей формы, кажется, что встроенного bootstrap5 для него нет. Вы уверены, что используете bootstrap5?

В настоящее время есть только bootstrap, bootstrap3, bootstrap4 и uni-form.

Вы можете взглянуть на свою файловую структуру, если видите папку bootstrap5.

Пакет шаблонов bootstrap 5 будет отдельным пакетом. На PyPI доступна очень ранняя версия, и вот ссылка на GitHub.

https://github.com/django-crispy-forms/crispy-bootstrap5

Как вы говорите, вы установили 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.

Anil Gupta 24.03.2023 15:34

В 2023 году (и далее) это правильный ответ на вопрос.

Hassan Baig 26.03.2023 18:34

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

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

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