首页 > 解决方案 > 使用 django usercreationform 的问题,而不是在 HTML 中呈现表单

问题描述

我使用 UserCreationForm 在 django 项目中创建了一个注册页面,但是在渲染我的 html 时,我只看到提交按钮

from django.shortcuts import render
from django.contrib.auth.forms import UserCreationForm

def register(request):
    form = UserCreationForm
    return(render(request, 'register.html', {form: form}))

{% extends 'base.html' %}

{% block title %}Sign Up{% endblock %}

{% block body %}
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="button">
    <button type="submit">Sign up</button>
</form>
{% endblock %}

标签: pythonhtmldjango

解决方案


您不能使用表单作为上下文的键,您应该使用'form'. 此外,传递对类的引用不是一个好主意,您应该在视图中创建表单的实例,因此:

from django.shortcuts import render
from django.contrib.auth.forms import UserCreationForm

def register(request):
    form = UserCreationForm()
    #            use 'form' instead of form  ↓    ↓
    return render(request, 'register.html', {'form': form})

如果您使用了表单对象,而不是对类的引用,则会引发 aForm不可散列的错误。但是由于您使用了对表单类的引用,因此没有错误,因此仍未检测到。


推荐阅读