【问题标题】:Django crispy forms is not working correctlyDjango 脆皮表单无法正常工作
【发布时间】:2026-01-13 19:15:03
【问题描述】:

清脆的表格不起作用,我没有任何错误,但表格仍然正常。想得到帮助。我不明白我从来没有遇到过这个问题,谢谢你

我的 INSTALLED_APPS 中有 'crispy_forms',它已正确安装

我尝试了很多东西,但没有得到任何结果

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})

【问题讨论】:

    标签: python css django


    【解决方案1】:

    1.doc中写着:

    crispy-forms 不包含静态文件。根据您使用的 CSS 框架(模板包),您需要自己包含适当的相应媒体文件。这可能涉及一个或多个 CSS 和 JS 文件。阅读 CSS 框架的文档以获取有关如何设置的帮助。

    你把所有的html文件代码都粘贴到这里了吗?我没有看到 cryspy-forms 文档提到的任何 CSS 框架,例如 bootstrap4

    请注意,您需要将以下内容添加到您的html

    cdn2见引导网站

    
    <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})
    

    【讨论】:

    • 这确实是问题所在,您必须将 css 和 js 添加到您的 html 文件中。查看更新的答案
    【解决方案2】:

    我的 INSTALLED_APPS 中有“crispy_forms”并且它已正确安装

    您可能已将“crispy_forms”放在 INSTALLED_APPS 中,但您是否在 settings.py 中指定了模板包?例如CRISPY_TEMPLATE_PACK = 'uni_form'

    【讨论】:

    • 是的,我的设置中有CRISPY_TEMPLATE_PACK = 'bootstrap4',我也试过CRISPY_TEMPLATE_PACK = 'uni_form',但它也不起作用