将列表作为上下文变量发送,然后通过POST再次返回

时间:2014-06-30 19:31:13

标签: django

假设在我看来,我有一个字符串列表,我将其作为上下文变量发送到模板。然后在该模板中,有一个提交的表单。该表单上的一个字段是隐藏字段,并设置为与上下文中的此列表相等。回到我的视图中,当我从请求的POST对象中读取此列表时,列表似乎已将原始列表中的所有字符分开,并将每个字符设置为其自己的元素。

例如,如果我的原始列表是['alpha','beta'],那么通过请求的POST对象从我的模板返回的列表显示为['a','l','p','h ','a','b','e','t','a']。

1)为什么会这样?

2)我如何保留原始格式?

以下是我的模板中的相关代码:

<form method="post">
    <input type="hidden" name="class_names" value="{{ class_names }}"/>
    <input type="submit" value="Submit" />
</form>

其中class_names是在视图中作为上下文变量传递的列表:

class_names = ['alpha', 'beta']
context = {'class_names': class_names}
return render(request, 'teacher/query.html', context)

然后在视图中从请求中提取此列表时:

class_names = request.POST['class_names']
for x in _class_names:
    print x

它打印出每个单独的字符,而不是列表中的每个单词。

1 个答案:

答案 0 :(得分:1)

你可以这样试试: 视图:

更新:你可以使用两个这样的变量:

class_names_for_radio = ['alpha', 'beta']
class_names = ','.join(class_names_for_radio)

context = {'class_names': class_names,
           'class_names_for_radio': class_names_for_radio}
return render(request, 'teacher/query.html', context)

模板:

<form method="post">
    <input type="hidden" name="class_names" value="{{ class_names }}"/>
    <input type="submit" value="Submit" />
</form>

收到值时:

class_names = request.POST['class_names'].split(',') #unsafe, just a demo
for x in _class_names:
    print x