【问题标题】:Pass a list of items via URL to a view通过 URL 将项目列表传递给视图
【发布时间】:2011-03-20 17:12:56
【问题描述】:

我有一个如下所示的项目列表:'Item 1', 'Item 2', 'Item 3'...,该列表的长度是动态的。

我的问题是如何将这个变量传递给我的视图?

编辑 1 只是想我会澄清我的尝试:

return HttpResponseRedirect(reverse('newFeatures', 
       kwargs={'stock_number': stock_number, 'new_features': new_features}))

new_features 是我的动态列表,newFeatures 是这样开头的视图:

def add_new_feature(request, stock_number, new_features):

不确定这是否有意义,但我希望它能帮助我摆脱黑暗

【问题讨论】:

  • 我们是在谈论将它从 url conf 传递给视图吗?
  • 不一定……让我试试下面the_void的答案,看看

标签: regex django django-urls django-views


【解决方案1】:

HttpResponseRedirect 只返回一个 HTTP 302 重定向响应,该响应重定向到另一个 url。您不能通过重定向发送任何类型的 POST 数据,因此如果您想包含任何变量,它必须是您重定向到的 url 的一部分。

如果您坚持在重定向之前不处理列表,那么您最好的选择可能是将列表转换为字符串并将其用作 url 中的参数。然后 newFeatures 函数可以将该字符串解析回项目列表。

【讨论】:

  • 实际上,如果 47 使用reverse() 传递new_features,那么他/她使用的是 GET,而不是 POST,这将允许更改或向前传递参数。
  • 是的。通过 GET 发送的数据是 URL 的一部分,所以你和我在想同样的事情。对不起,如果我模棱两可。
【解决方案2】:

怎么样:

return HttpResponseRedirect(reverse('newFeatures', 
    kwargs={'stock_number': stock_number, 'new_features': ','.join(new_features)}))

和:

def add_new_feature(request, stock_number, new_features_str):
    new_features = new_features_str.split(',')

这假定new_features 中的元素仅包含对 URL 安全的字符,并且不包含逗号。如果不是这种情况,那么您将不得不执行某种形式的转义。

请记住,不建议 GET 样式的 URL 更改其目标的状态。您应该为此使用 POST,这将阻止您通过 URL 传递参数(即通过 reverse())。此外,有时服务器对 URL 长度有限制,这可能会妨碍 GET。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    相关资源
    最近更新 更多