如何从模板中获取用户未提交的变量

时间:2012-05-25 08:30:36

标签: django django-forms django-templates django-views

我是django的新手并且在练习中我试图编写我自己版本的所有熟悉的待办事项列表'应用

我有一些页面显示用户输入的所有待办事项列表项目,以及用于编辑每个项目的按钮。编辑按钮将用户发送到另一个页面,其中包含要在项目更改中输入的表单。

用户可以更改项目的所有内容。显然request.POST给了我用户刚刚放入表单的所有信息,但我希望这些信息重写他们最初点击的项目的信息。那么如何编写视图代码以找出原始项目是什么?

我想我可以将表单提交按钮格式化为:

  

<button type="submit" name="save" value={{ item.pk }}>Save</button>

并以此方式获取主键

但是我可以说我已将两个项目传递到编辑页面,我想让用户能够将它们组合在一起。再一次,我可以弄明白这些项目是做什么的:

  

<button type="submit" name="save" value='{{ item1.pk }} {{ item2.pk }}'>Save</button>

然后

  

request['save'].split(' ')

但这似乎有点愚蠢。还有其他一些不那么暴力的方式吗?

喜欢:

  

request.tell_me_all_items_passed_to_the_template

有点什么?

2 个答案:

答案 0 :(得分:1)

如果其他人有同样的问题

所以不要这样做:

模板

<form method="post" action="/list/saving/">
    <!--- form fields --->
    <button type="submit" name="save" value='{{ item.pk }}'>Save</button>
</form>

url.py

(r'^list/saving/$', save)

views.py

def save(request):
    ....
    item = Item.objects.get(pk=request.POST['save'])
    ....

执行此操作:

模板

<form method="post" action="{% url todolist.views.save item.pk %}">
    <!--- form fields --->
    <button type="submit" name="save">Save</button>
</form>

url.py

(r'^list/saving/(\d+)/$', save)

views.py

def save(request, pk):
    ....
    item = Item.objects.get(pk=pk)
    ....

More info on url reversing

答案 1 :(得分:0)

如果你真的需要,只需使用隐藏的输入。但是,这无论如何都是不必要的。用户可能能够更改有关该项目的“所有内容”,但他们无法更改pk(或至少他们不应该能够...不要给他们选择)。 pk是Django用来识别对象的东西,所以这已经为你处理了。不确定这里的问题是什么。