【问题标题】:Django - getting POST to return a dictionary where the values are listsDjango - 让 POST 返回一个字典,其中值是列表
【发布时间】:2013-08-04 23:38:59
【问题描述】:

被这个卡住了一段时间:

我们有一个视图,上面有很多菜,像这样:

spaghetti
tacos
burger

我们希望用户能够输入与每道菜相关的两条信息,即等级和评论。例如

spaghetti: 20, "tasty"
tacos: 10, "nasty"

但是,我们似乎无法找到一种方法来为评分和评论的输入框提供相同的名称,因此我们会返回一个 POST 字典,其中值本身就是列表:

spaghetti: [20,"tasty"]
tacos:  [10, "nasty"]

如果我们在html表单中将输入框和评论框都命名为“spaghetti”,那么POST只会跟踪第二件事,也就是评论,等级完全丢失,所以我们得到的只是:

spaghetti: "tasty"
tacos: "nasty"

让我们知道我们做错了什么!

谢谢!

【问题讨论】:

    标签: python django post


    【解决方案1】:

    不幸的是,您只需要为每个等级和评论使用不同的 id,然后进行一些服务器端解析以很好地格式化您的数据。或者您可以进行客户端解析并使用 $.post 将 JSON 数据发送到服务器。老实说,我倾向于第二种选择,尽管您仍然需要进行一些服务器端验证/数据清理。

    如果你选择第二个选项,你可以这样做:

    <div id='spaghetti'>
      <input field-type='grade' />
      <input field-type='comment' />
    </div>
    
    <script>
      $(document).ready(function() {
        $('input[type=submit]').click(function() {
          var data = {}
          var grade = $('#spaghetti').children('input[field-type=grade]').first().val();
          var comment = $('#spaghetti').children('input[field-type=comment]').first().val();
          data['spaghetti'] = [grade, comment];
          $.post('url', data);
        }
      }
    

    【讨论】:

    • 感谢您的建议和示例代码!今天要玩它。
    【解决方案2】:

    在表格中,命名一个 spaghetti_grade 和另一个 spaghetti_taste。然后您可以使用以下方式访问它们:

    request.POST.get('spaghetti_grade','')request.POST.get('spaghetti_taste','')

    这将使您无需列表即可获得两者。然后你可以对其他食物做同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多