【问题标题】:Getting dropdown value from template django从模板django获取下拉值
【发布时间】:2014-02-08 01:08:40
【问题描述】:

我在使用 django(使用 shopcart)时遇到问题。我想添加一个选择选项字段来动态更改购物车中的项目订阅,但我没有从模板中获得选择的值。

在我的模板中显示我拥有的购物车:

<form action="" method="GET">{%csrf_token%}
<select name="suscr" title="suscr">
<option value="" selected>Suscribe</option>
<option value="1" name="suscr" >Weekly</option>
<option value="2" name="suscr">Monthly</option>
</select>
</form> 

我想选择一个选项,然后,如果我按“结帐”来更新购物车。

除此之外,我相信它缺少修改 cart.py 中项目的方法。

任何想法都会有所帮助。

谢谢

上面的表格在一个循环里面 {% for item in cart %}

【问题讨论】:

  • 你能澄清一下“没有从模板中选择值”是什么意思吗?我假设您对您的表单正在提交有一些看法,并且 action 属性实际上不是空白的?用户提交后,“suscr=”是否没有显示在url中?
  • 附带说明,如果订阅选项只是用作标题,您实际上不应该将它作为下拉列表的一部分;改用标签。如果它是一个有意义的选项,那么它的值不应为空。
  • 我的意思是它没有检索值。在我看来,我检查方法 GET

标签: django django-templates


【解决方案1】:

我建议你做的不是面向python,而是大部分都是javascript,因为从描述中,我们假设你正在处理的都是在客户端进行的。

当您处理购物车时,我要做的是将用户正在检查的内容存储在 sessionStorage 中,这样即使在用户浏览您的网站时,这些信息也会持续存在有多个标签。由于用户可能只是“四处走动”您的购物网站,因此无需在不知道用户是否想要的情况下将内容推送到数据库。只需删除form 并继续选择,然后您将获得用户选择的内容,并附加要选择的属性:&lt;select onchange=my_function(this.value)&gt;...&lt;/select&gt;,然后在script 中的my_function 中更改任何您想要的页面。

当用户进入购物车页面时,您向他展示他到目前为止选择的内容,从sessionStorage获取商品,然后,如果他/她确认要购买,则向服务器端提交表单,更新数据库并按照您的工作流程状态进行处理。

tl;dr:将选项存储在sessionStorage中,最后发布到服务器。 有关服务器端的帮助,请使用有关 cart.py 的更多信息更新您的问题

【讨论】:

  • 感谢您的回复。在用户进行结帐之前,我已经将购物车存储在会话中。但是,当我向用户展示购物车时(在 session 中),我让他们可以选择为每个项目选择“订阅类型”。然后,我想使用 select 选项中的订阅选项更新该会话。 (不需要额外的按钮,直接来自选择选项)。希望我能澄清我的问题。
  • 那么,问题是从&lt;select&gt; 获取值,然后将其发送到将其添加到会话的视图?如果这是问题,则可以通过答案部分解决,因为每次用户选择某些内容时都会触发onchange。它只需要定义一个视图来处理带有数据的请求并更新请求附带的会话。如果我再次误解了,请告诉我(对于拼写错误和语法错误,我们深表歉意)
  • 是的,我认为你是对的。但是我可以使用模板中的脚本更改会话中的值吗?还是有一种方法可以通过“onchange”将选定的值传递给视图?
  • 只需将值传递给视图。对于异步执行此操作,我认为this 之类的东西就足够了。这是获取特定于该用户的会话对象并对其进行更改的唯一方法。你可以通过 POST 或 GET 来做到这一点,你自己决定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 1970-01-01
  • 2015-07-02
  • 2018-09-23
  • 2019-05-23
  • 2014-07-13
相关资源
最近更新 更多