Django中registeration.html表单无法渲染问题求助
问题修复方案
1. 模板Block名称不匹配(核心问题)
base.html中定义的内容块是body_block,但resgisteration.html里误用了body_bloc(少写最后一个字母k),导致模板内容无法渲染。
修改resgisteration.html:
{% extends 'big_app/base.html' %} {% load static %} {% block body_block %} <div class="jumbotron"> <h1> Form </h1> {% if registered %} <h1> Thank you for registering </h1> {% else %} <h1> Register here </h1> <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ user_form.as_p }} {{ profile_form.as_p }} <input type="submit" name="" value="register"> </form> {% endif %} </div> {% endblock body_block %}
额外修正:模板里的jumbotorn拼写为jumbotron,避免样式失效
2. 模板文件名拼写规范(可选但重要)
views.py中渲染的模板名是big_app/resgisteration.html(多了一个s),建议统一拼写为标准的registration.html:
修改views.py:
return render( request, "big_app/registration.html", # 修正拼写 { "user_form": user_form, "profile_form": profile_form, "registered": registered, }, )
同时将模板文件重命名为registration.html
3. 路由语法优化(适配Django 4.0+)
Django 4.0+推荐使用path代替re_path,让路由更简洁易读:
auth_test/urls.py:
from django.contrib import admin from django.urls import path, include from big_app import views urlpatterns = [ path('', views.index, name='index'), path('admin/', admin.site.urls), path('big_app/', include('big_app.urls')), ]
big_app/urls.py:
from django.urls import path from big_app import views app_name = 'big_app' urlpatterns = [ path('register/', views.register, name='register'), ]
4. 密码逻辑优化(可选)
如果你的UserForm继承自UserCreationForm,它已经内置了密码哈希逻辑,不需要手动调用user.set_password(user.password),否则会导致密码重复哈希,用户无法正常登录。
验证流程
- 修正上述代码后重启Django服务器
- 访问
/big_app/register,确认表单正常显示 - 填写表单并提交,此时
request.method会变为POST,进入表单验证与保存逻辑
内容的提问来源于stack exchange,提问作者Danish Xavier
相关产品推荐
相关产品推荐

