Django crispy forms работает некорректно

#python #css #django

#python #css #django

Вопрос:

crispy forms не работает, у меня нет никаких ошибок, но формы по-прежнему работают нормально. Хотелось бы получить помощь в этом. Я не понимаю, у меня никогда не было этой проблемы, спасибо

У меня есть 'crispy_forms' в моем INSTALLED_APPS, и он установлен правильно

Я перепробовал много вещей, но не получил никакого результата

newhome.html

 {% load crispy_forms_tags %}
{% load static %}

{% block content %}

<link rel="stylesheet" type="text/css" href="{% static 'pools/newmain.css' %}">

<!-- Load an icon library to show a hamburger menu (bars) on small screens -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<div class="topnav" id="myTopnav">
  <a href="#home" class="active">Home</a>
  <a href="#news">News</a>
  <a href="#contact">Contact</a>
  <a href="#about">About</a>
  <a href="javascript:void(0);" class="icon" onclick="myFunction()">
    <i class="fa fa-bars"></i>
  </a>
</div>



<div class="content-section">
  <form method="POST" action="">
    {% csrf_token %}
    {{ form|crispy }}
    <button class="btn btn-outline-info" type="submit">Send</button>
  </form>

</div>

{% endblock %}

 

newmain.css

 body {
    background-color: coral;
}

/* Add a black background color to the top navigation */
.topnav {
  background-color: #333;
  overflow: hidden;
}

/* Style the links inside the navigation bar */
.topnav a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

/* Change the color of links on hover */
.topnav a:hover {
  background-color: #ddd;
  color: black;
}

/* Add an active class to highlight the current page */
.topnav a.active {
  background-color: #4CAF50;
  color: white;
}

/* Hide the link that should open and close the topnav on small screens */
.topnav .icon {
  display: none;
}
 

views.py

 def newhome(request):
    form = NewTask

    if request.method == "POST":
        form = NewTask(request.POST)
        if form.is_valid():
            form.save()
            task = form.cleaned_data["title"]
            print(task)

        else:
            form = NewTask()

        return render(request, "pools/newhome.html", {"form": form})
    return render(request, "pools/newhome.html", {"form": form})

 

Ответ №1:

1.In док, там написано:

crispy-forms не включает статические файлы. Вам нужно будет самостоятельно включить соответствующие соответствующие медиафайлы в зависимости от того, какой фреймворк CSS (пакет шаблонов) вы используете. Это может включать один или несколько файлов CSS и JS. Прочитайте документы CSS framework для получения справки о том, как его настроить.

Вы вставили сюда весь код HTML-файла? Я не вижу ни одного фреймворка CSS, который упоминался в документе cryspy-forms, например bootstrap4 .

Обратите внимание, что вам необходимо добавить в свой html

см. Веб-сайт bootstrap для cdn 2

 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA 058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5 76PVCmYl" crossorigin="anonymous"></script>
 

Не забудьте удалить историю просмотров!

  1. после того, как вы исправили часть css, ваша форма может работать неправильно. попробуйте заменить на:
 def newhome(request):
    if request.method == "POST":
        form = NewTask(request.POST)
        if form.is_valid():
            task = form.cleaned_data["title"] # this is good practice because later you might want to add things like user = request.user before saving the form.
            form.save()
            print(task)
        else:
            print(form.errors) 
    else:
        form = NewTask()

    return render(request, "pools/newhome.html", {"form": form})
 

Комментарии:

1. это действительно проблема, вам нужно добавить css и js в ваш html-файл. смотрите обновленный ответ

Ответ №2:

У меня есть ‘crispy_forms’ в моих INSTALLED_APPS, и он установлен правильно

Возможно, вы поместили ‘crispy_forms’ в INSTALLED_APPS, но указали ли вы свой пакет шаблонов в своем settings.py ? например, CRISPY_TEMPLATE_PACK = 'uni_form'

Комментарии:

1. да, у меня есть CRISPY_TEMPLATE_PACK = 'bootstrap4' в настройках, я тоже пробовал CRISPY_TEMPLATE_PACK = 'uni_form' , и это тоже не работает