【问题标题】:Django form doesn't renderDjango 表单不呈现
【发布时间】: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。

标签: python django django-forms


【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2019-04-25
      • 2015-08-13
      相关资源
      最近更新 更多