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 ,要么从表单标签周围删除&lt;table&gt;&lt;/table&gt;

【讨论】:

这没用...我很有希望...我使用了 form.as_table 并保留了&lt;table&gt;&lt;/table&gt; 标签谢谢!!! 在尝试了您的建议并阅读了文档之后,我仍然无法让我的代码正常工作。您还有其他建议吗?【参考方案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 表单不呈现的主要内容,如果未能解决你的问题,请参考以下文章

Django,表单未在模板中呈现

Django 表单 - django-bootstrap-datepicker-plus 未呈现 datepicker

在 Django 中发生错误时呈现管理表单

Django 如何知道呈现表单字段的顺序?

Django:基于类的视图无法呈现清晰的表单

Django - 呈现单个表单字段的 <label>