You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django signup页面出现BootstrapError:form参数无效的解决求助

解决Django Bootstrap4中Signup页面的BootstrapError问题

我在使用Django搭配Bootstrap4开发时,signup页面出现BootstrapError,提示“Parameter 'form' should contain a valid Django Form”,但login页面使用相同的{% bootstrap_form form %}标签却能正常运行。尝试添加layout='inline'参数但无效,相关代码如下,请求解决该错误的方法。

相关代码

views.py

from django.shortcuts import redirect, render
from .forms import SignupForm
from django.contrib.auth import authenticate, login


# Create your views here.
def sign_up(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data('username')
            password = form.cleaned_data('password1')
            user = authenticate(username=username, password=password)
            login(request, user)
            return redirect('/accounts/profile')
    else:
        form = SignupForm()
        
    context = {form: 'form'}
    return render(request, 'registration/signup.html', context)

forms.py

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class SignupForm(UserCreationForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'password1', 'password2')

signup.html

{% extends "base_generic.html" %}
{% load bootstrap4 %}

{% block content %}

  <form method="post" >
    {% csrf_token %}
    {% bootstrap_form form %}
    <input type="submit" value="signup" class="boxed-btn3 w-100">
  </form>

{% endblock %}

login.html

{% extends "base_generic.html" %}
{% load bootstrap4 %}

{% block content %}

  {% if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
  {% endif %}

  {% if next %}
    {% if user.is_authenticated %}
      <p>Your account doesn't have access to this page. To proceed,
      please login with an account that has access.</p>
    {% else %}
      <p>Please login to see this page.</p>
    {% endif %}
  {% endif %}
  
  <form method="post" action="{% url 'login' %}">
    {% csrf_token %}
    {% bootstrap_form form %}
    <input type="submit" value="login" class="boxed-btn3 w-100">
    <input type="hidden" name="next" value="{{ next }}">
  </form>

  {# Assumes you setup the password_reset view in your URLconf #}
  <p><a href="{% url 'password_reset' %}">Lost password?</a></p>

{% endblock %}

解决方法

问题出在两个地方,修改后即可解决错误:

  1. 上下文字典赋值错误
    原代码中context = {form: 'form'}把Form对象作为字典键,字符串'form'作为值,模板无法识别到正确的表单对象。正确写法是将键设为模板中引用的变量名'form',值为Form实例:

    context = {'form': form}
    
  2. cleaned_data取值语法错误
    form.cleaned_data是字典类型,需用方括号[]访问键值,原代码用圆括号调用会报错,修改为:

    username = form.cleaned_data['username']
    password = form.cleaned_data['password1']
    

修改后的完整views.py代码

from django.shortcuts import redirect, render
from .forms import SignupForm
from django.contrib.auth import authenticate, login


# Create your views here.
def sign_up(request):
    if request.method == 'POST':
        form = SignupForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user = authenticate(username=username, password=password)
            login(request, user)
            return redirect('/accounts/profile')
    else:
        form = SignupForm()
        
    context = {'form': form}
    return render(request, 'registration/signup.html', context)

内容的提问来源于stack exchange,提问作者Omnia Osman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:27:50