【问题标题】:How do I get variables not submitted by the user back from a template如何从模板中获取用户未提交的变量
【发布时间】:2012-05-31 20:08:15
【问题描述】:

我是 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

是什么?

【问题讨论】:

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


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您好,感谢您的回复。对,我不希望用户更改pk,这就是我的观点。 request.POST 向我提供了表单中的内容,我想要一些关于我的原始项目的信息通过模板而不让用户看到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2021-03-02
    • 2018-10-13
    • 2017-09-14
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多