2010-07-25 54 views
-1

我有一个如下所示的项目列表:'Item 1', 'Item 2', 'Item 3'...列表的长度是动态的。将通过URL的项目列表传递到视图

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

编辑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): 

不知道这是否合理,但我希望它能帮助我脱离黑暗

+0

我们是在讨论将它从url conf传递给视图吗? – 2010-07-25 10:19:29

+0

不一定......让我试试下面的the_void的答案,看看 – Stephen 2010-07-25 11:03:59

回答

0

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

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

+0

实际上,如果47正在使用'reverse()'来传递'new_features',那么他/她使用的是GET,而不是POST,这将允许参数改变或向前传递。 – 2010-07-25 15:32:34

+0

是的。通过GET发送的数据是URL的一部分,所以你和我都在考虑同样的事情。对不起,如果我不明确。 – BernzSed 2010-07-25 19:32:43

0

如何:

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元素只包括那些对安全的网址字符,不包含逗号。如果情况并非如此,那么您将不得不执行某种形式的转义。

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