Django表单不呈现

时间:2012-03-15 21:07:21

标签: python django django-forms

您好,并提前感谢您。我有一个不在模板上渲染的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 />
#...

感谢您的帮助。

6 个答案:

答案 0 :(得分:6)

阅读答案帖子,似乎你仍然没有运气。

尝试在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,也可以捕获异常。这将告诉您有关需要修复的内容的更多信息。

答案 1 :(得分:2)

使用{{ form.as_table }}或从表单标记中删除<table></table>

答案 2 :(得分:1)

我认为这是转向泛型课程的标志:)只需尝试 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"))

答案 3 :(得分:0)

{{ form.as_p }}为例。还有其他快捷方式。您也可以手动创建表单。查看Django文档:https://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs

答案 4 :(得分:0)

在你的html文件中尝试“form.as_p”或“form.as_table”而不只是“form”。

编辑:查看文档并将其中一个示例用作模型:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/

在您的示例中,您在模型中定义表单参数,这可能不正确。您希望保留表单特定的修改,例如DraftForm类中的help_text,现在在DraftInput模型中。

这是一个简单的问题,你应该从文档中复制一些内容,然后按照你想要的方式工作。

希望这有帮助。

答案 5 :(得分:0)

无法快速找到根本原因,但是仅当变量声明遵循常规的module.Class形式时,我的表单中的字段才会显示。问题可能在类加载顺序中。

from simple import models

# ...
form = models.DraftForm()