Django表单未渲染故障:仅显示模板硬编码HTML内容
解决Django表单未渲染问题
核心问题:表单字段定义错误
你的forms.py存在基础错误:forms.Textarea是表单控件(widget),不是字段类型。Django无法识别这种错误定义,自然没法渲染表单。
修复后的forms.py
from django import forms class BulkModulImport(forms.Form): text = forms.CharField( widget=forms.Textarea(attrs={'class': 'form-control', 'rows': '4'}) )
视图逻辑补全
views.py里还有两处问题:
- POST请求表单验证失败时,没有把表单对象传回模板,会导致页面依然无表单
- 数据处理函数定义在
if form.is_valid()内部不符合规范,且保存数据时误用了原未处理的文本行
修复后的views.py
from django.shortcuts import render, redirect, reverse from django.utils import timezone from django.contrib import messages import re from .forms import BulkModulImport from .models import Modul # 把处理函数移到外部,更符合代码规范 def remove_dots_and_numbers(text): lines = text.split('\n') updated_lines = [] for line in lines: # 移除行尾的点和数字,同时去掉首尾空白 updated_line = line.replace(' .', '') updated_line = re.sub(r'\s*\d*$', '', updated_line).strip() # 跳过空行和指定标识行 if updated_line and "Module der Lehreinheit" not in updated_line: # 使用处理后的文本保存数据 Modul( title=updated_line, proposer=request.user, dozent=None, created_date=timezone.now(), description="" ).save() updated_lines.append(updated_line) return updated_lines def bulk_modul_import(request): if request.method == "POST": form = BulkModulImport(request.POST) if form.is_valid(): remove_dots_and_numbers(form.cleaned_data['text']) messages.success(request, '模块批量导入成功!') return redirect(reverse('modul_list')) # 表单验证失败时,带错误信息传回模板 return render(request, 'score/bulk_import.html', {'form2': form}) else: form2 = BulkModulImport() return render(request, 'score/bulk_import.html', {'form2': form2})
模板确认
你的bulk_import.html写法无问题,修复上述代码后,表单即可正常渲染。若需要更精细的样式控制,也可以用{{ form2.as_p }}或手动遍历字段渲染。
内容的提问来源于stack exchange,提问作者Janski
相关产品推荐
相关产品推荐

