【问题标题】:Additional POST data for djangodjango 的附加 POST 数据
【发布时间】:2012-09-23 18:39:35
【问题描述】:

我正在使用 Django,但在不修改 url 的情况下将变量信息传回服务器时遇到了麻烦。这就是我想要的方式,除了我希望动作是/foo:

<form method="post" action="/foo/{{ variable }}">
  <input type="submit" value="bar"/>
</form>

当我这样做时,我可以在解析 url 时轻松获取变量。相反,我想将变量添加到 POST QueryDict。这可能吗?

【问题讨论】:

    标签: django forms post


    【解决方案1】:

    是的。只需添加额外的输入字段:

    <form method="post" action="/foo/">
      <input type="hidden" value="{{ variable }}" name="name_of_var">
      <input type="submit" value="bar"/>
    </form>
    

    然后您可以通过以下方式访问视图中的变量:

    request.POST['name_of_var']
    

    或者如果您不确定变量是否存在。这不会引发异常是不存在的。

    request.POST.get('name_of_var')
    

    【讨论】:

    • 没有输入的名称。
    • request.POST.name_of_var 和 request.POST['name_of_var'] 有什么区别?
    • request.POST['name_of_var'] 有效。 miki725给出的版本没有。
    • 不好。我想我累了。不直接思考。 request.POSTMultiDict,应该使用项目查找符号来访问。
    【解决方案2】:

    只需在表单中输入:

    <input type="hidden" value="{{ variable }}" name="foo" />
    

    然后在视图上:

    foo = request.POST.get('foo', None)
    

    另外,我建议您将url tag 用于action

    【讨论】:

      【解决方案3】:

      只需添加一个带有您需要的名称和值的隐藏输入元素,如下所示:

      <input type="hidden" name="varname" value="myvalue" />
      

      【讨论】:

        【解决方案4】:

        您不能将变量设置为表单中的输入字段吗?您可以将其隐藏以避免覆盖它。这将在提交中发布数据并实现您想要的。

        【讨论】:

          【解决方案5】:

          这不是 Django 会话框架的用途吗?您可以来回传递数据,而无需尝试通过 url 传递数据。

          会话框架允许您基于每个站点访问者存储和检索任意数据。它将数据存储在服务器端并抽象了cookie的发送和接收。

          https://docs.djangoproject.com/en/1.5/topics/http/sessions/

          【讨论】:

          • NM 这不是 OP 想要做的。
          猜你喜欢
          • 1970-01-01
          • 2018-08-13
          • 1970-01-01
          • 2012-01-08
          • 2011-11-27
          • 1970-01-01
          • 2014-12-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多