2012-03-15 142 views
0

你好,先谢谢你。我有一个不在模板上呈现的django表单。 “提交”按钮呈现,但表单不。我一直盯着这个代码约6个小时,这可能是非常简单的事情,我可能需要另一双眼睛。Django窗体不显示

我的模型:

#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 /> 
#... 

谢谢您的帮助。

+1

您是否查看源代码以查看显示的内容? – 2012-03-15 21:16:55

+0

我有这个确切的问题,因为我忘了修改我的'urls.py'来使用新视图。它进一步使用了我在那里临时添加的TemplateView。 – moooeeeep 2014-06-17 10:05:15

回答

0

尝试{{ form.as_p }}例如。还有其他捷径。您也可以手动创建表单。看看Django Docs:https://docs.djangoproject.com/en/dev/topics/forms/?from=olddocs

+0

我厌倦了使用'{{form.as_p}}'没有快乐。我将检查你现在推荐的文档。谢谢! – dpbklyn 2012-03-15 22:08:23

+0

阅读文档后,我仍然无法让我的代码正常工作。你有什么其他的建议? – dpbklyn 2012-03-16 12:04:16

+0

你可以安装django调试工具栏并检查表单是否被渲染到上下文中。 – Jingo 2012-03-16 12:35:53

0

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

编辑:签出的文档,并使用自己的例子作为模型之一:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/

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

这是一个简单的问题,您应该从文档中复制某些内容,然后朝着您想要的方向工作。

希望这会有所帮助。

+0

尝试所有3没有运气。谢谢! – dpbklyn 2012-03-15 22:08:53

+0

在尝试了您的建议并阅读文档后,我仍然无法让我的代码正常工作。你有什么其他的建议? – dpbklyn 2012-03-16 12:05:25

+0

@dpbklyn在我的回答中增加了更多信息。祝你好运。 – zallarak 2012-03-16 16:31:26

2

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

+0

这并没有工作...我是这么希望...我用'{{form.as_table}}'并保持'

'标签感谢你! – dpbklyn 2012-03-15 22:07:42

+0

在尝试了您的建议并阅读文档后,我仍然无法让我的代码正常工作。你有什么其他的建议? – dpbklyn 2012-03-16 12:04:54

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")) 
+0

有人认为泛型视图比泛型类更好:) – 2012-03-16 08:21:09

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,或将捕获异常。这会告诉你更多你需要解决的问题。