【问题标题】:Passing objects from template to view using Django使用 Django 将对象从模板传递到视图
【发布时间】:2013-04-10 15:53:03
【问题描述】:

我正在尝试找出以下应用的架构:

  1. 向用户显示一个表格。
  2. 每个表格单元格都有几个字段供用户填写。
  3. 有一个通用提交按钮:当点击所有输入数据(以及基于输入值的每个单元格的一些计算数据)时,应传递到 Django 视图。

这里有以下问题:

  1. 我能否将数据结构组织为一组对象,使每个对象对应一个表格单元格,而最终将传递给 Django 视图的 Master 对象将是一组那些物体?

  2. 如果是这样,如何将 Master 对象从模板传递给使用 Django 进行查看?

谢谢。

【问题讨论】:

  • 您能否发布一些 html,以便我们可视化您现在拥有的内容。无论如何,如果您单击提交,您的视图应该会看到所有使用 request.POST 的字段
  • 谢谢。我没有完整的 HTML,但我试图在开始做之前弄清楚架构,因此我的问题。基本上我要问的是: 1. 是否可以在 HTML/JS 中创建一个对象,其成员将包含来自字段的数据? 2. 是否有可能以任何方式将该对象传递到 python 视图中?

标签: javascript python django django-views javascript-objects


【解决方案1】:

1.是否可以在 HTML/JS 中创建一个对象,其成员将包含来自字段的数据?

您无法在 html/JS 中创建对象,但您可以构建代码以在 Django 中显示或请求来自对象的数据。

比如说,你有一个模型 Foo

class Foo(models.Model):
    GENDER = (
      ('F', 'Female'),
      ('M', 'Male'),
    )
    name = models.CharField(max_length=150)
    gender = models.CharField(max_length=1, choices=GENDER)

你的模板看起来像这样

<body>
<form action="?" method="post">
<table>
    <tr>
        <td>Name</td>
        <td><input type="text" name="name" maxlength="150" /></td>
    </tr>
    <tr>
        <td>Gender</td>
        <td>
            <select name="gender">
                <option value="F">Female</option>
                <option value="M">Male</option>
            </select>
        </td>
    </tr>
</table>
<input type="submit">
</form>
</body>

如果您填写字段并单击提交,则您可以处理视图中的数据。

def add_foo(request):
    if request.method == "POST": # Check if the form is submitted
        foo = Foo() # instantiate a new object Foo, don't forget you need to import it first
        foo.name = request.POST['name']
        foo.gender = request.POST['gender']
        foo.save() # You need to save the object, for it to be stored in the database
        #Now you can redirect to another page
        return HttpResponseRedirect('/success/')
    else: #The form wasn't submitted, show the template above
        return render(request, 'path/to/template.html')

我想,最后一点也回答了问题 2。希望这会有所帮助。

【讨论】:

  • 谢谢!在您上面的评论之后,我自己一直在考虑它并得出结论,为表单的字段分配不同的 HTML 名称,然后使用 request.POST 在视图中检索它们对我来说是正确的解决方案。
猜你喜欢
  • 2017-04-26
  • 2016-09-28
  • 2015-09-18
  • 2015-07-07
  • 2018-02-10
  • 2014-03-26
  • 2017-05-04
  • 1970-01-01
  • 2020-03-19
相关资源
最近更新 更多