Django 表单不呈现
Posted
技术标签:
【中文标题】Django 表单不呈现【英文标题】:Django form doesn't render 【发布时间】:2012-04-01 11:01:35 【问题描述】:您好,提前谢谢您。我有一个没有在模板上呈现的 django 表单。 “提交”按钮呈现,但表单不呈现。我一直盯着这段代码大约 6 个小时,它可能很简单,我可能需要另一双眼睛。
我的模特:
#models.py
from django.db import models
from django.forms import ModelForm
class DraftInput(models.Model):
player_id = models.IntegerField(help_text = 'Input Player ID Number', max_length = 5)
def __unicode__(self):
return self.player_id
class DraftForm(ModelForm):
class Meta:
model = DraftInput
我的看法:
#views.py
from django.shortcuts import render_to_response
from simple.models import DraftInput
from simple.models import DraftForm
from django.template import RequestContext
#...
def draft_view(request):
if request.method == 'POST':
form = DraftForm(request.POST)
if form.is_valid():
form.save()
else:
form = DraftForm()
return render_to_response('simple/draft_input.html', 'form': form )
我的模板:
#draft_input.html
#...
<h1>Draft Input</h1>
<h2>Draft</h2><br /><br />
<form method="POST" action="">
<table> form </table>
<input type="submit" value="Draft Player" />
</form><br /><br />
#...
感谢您的帮助。
【问题讨论】:
您是否查看了源代码以查看显示的内容? 我遇到了这个确切的问题,因为我忘记调整我的urls.py
以使用新视图。它进一步使用了我临时添加的 TemplateView。
【参考方案1】:
阅读答案线程,您似乎仍然不走运。
尝试在 django 交互式 shell (python manage.py shell
) 中执行这些命令。当您尝试格式化表单时,可能会引发异常。当在模板中生成表单的过程中抛出异常时,您在 HTML 中将看不到太多内容;但是 django shell 通常会揭露罪魁祸首。
python manage.py shell
In [1]: from simple.models import DraftForm
In [2]: form = DraftForm()
In [3]: form.as_p()
您可以在此处查看生成的 HTML,也可以捕获异常。这将告诉您更多关于您需要解决的问题。
【讨论】:
【参考方案2】:要么使用 form.as_table
,要么从表单标签周围删除<table></table>
。
【讨论】:
这没用...我很有希望...我使用了 form.as_table
并保留了<table></table>
标签谢谢!!!
在尝试了您的建议并阅读了文档之后,我仍然无法让我的代码正常工作。您还有其他建议吗?【参考方案3】:
我认为这是转向泛型类的标志 :) 试试 CreateView 类
在您的 views.py 文件中:
class CreateDraftInputView(CreateView):
model = DraftInput
template_name = "test/draftinput_form.html"
success_url = "/test/listdraft/"
简单的创建模板:
<form method="POST" action=".">
<table>
% csrf_token %
form.as_table
<input type="submit" />
</table>
</form>
并且非常简单的记录列表在您的 urls.py 中:
, (r"^listdraft/$", ListView.as_view(model = DraftInput, template_name = "draftinput_list.html"))
【讨论】:
有人认为泛型视图比泛型类更好:)【参考方案4】:以 form.as_p
为例。还有其他捷径。您也可以手动创建表单。查看 Django 文档:https://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs
【讨论】:
我厌倦了使用 form.as_p
不快乐。我现在要查看您推荐的文档。谢谢!
阅读文档后,我仍然无法让我的代码工作。您还有其他建议吗?
您可以安装 django 调试工具栏并检查表单是否呈现到上下文中。【参考方案5】:
在您的 html 文件中尝试“form.as_p”或“form.as_table”而不是“form”。
编辑:查看文档并使用其中一个示例作为模型:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/
在您的示例中,您在模型中定义了表单参数,这可能不正确。您希望将特定于表单的修改(例如 DraftForm 类中的 help_text)保留在 DraftInput 模型中。
这是一个简单的问题,您应该从文档中复制一些内容,然后朝着您想要的方向努力。
希望这会有所帮助。
【讨论】:
在尝试了您的建议并阅读了文档之后,我仍然无法让我的代码正常工作。您还有其他建议吗? @dpbklyn 在我的回答中添加了更多信息。祝你好运。【参考方案6】:无法快速找到根本原因,但我的表单中的字段仅在变量声明遵循传统的module.Class
表单时才会显示。问题可能出在类加载顺序中。
from simple import models
# ...
form = models.DraftForm()
【讨论】:
以上是关于Django 表单不呈现的主要内容,如果未能解决你的问题,请参考以下文章