Django 将列表作为上下文变量发送,然后通过POST再次发送
假设在我的视图中,我有一个字符串列表,我将其作为上下文变量发送给模板。然后在该模板中,有一个提交的表单。该表单上的一个字段是隐藏字段,设置为与上下文中的此列表相等。在我看来,当我从请求的POST对象中读取此列表时,该列表似乎已将所有字符从原始列表中分离出来,并将每个字符设置为其自己的元素 例如,如果我的原始列表是['alpha','beta',],那么通过请求的POST对象从我的模板返回的列表将显示为['a','l','p','h','a','b','e','t','a'] 1) 为什么会发生这种情况 2) 如何保持原始格式 以下是我的模板中的相关代码:Django 将列表作为上下文变量发送,然后通过POST再次发送,django,Django,假设在我的视图中,我有一个字符串列表,我将其作为上下文变量发送给模板。然后在该模板中,有一个提交的表单。该表单上的一个字段是隐藏字段,设置为与上下文中的此列表相等。在我看来,当我从请求的POST对象中读取此列表时,该列表似乎已将所有字符从原始列表中分离出来,并将每个字符设置为其自己的元素 例如,如果我的原始列表是['alpha','beta',],那么通过请求的POST对象从我的模板返回的列表将显示为['a','l','p','h','a','b','e','t','a'] 1) 为什么会发生这
<form method="post">
<input type="hidden" name="class_names" value="{{ class_names }}"/>
<input type="submit" value="Submit" />
</form>
然后在视图中,当我从请求中提取此列表时:
class_names = request.POST['class_names']
for x in _class_names:
print x
它打印出每个字符,而不是列表中的每个单词。您可以这样尝试: 视图: 更新:您可以使用如下两个变量:
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>
你的模板是什么样子的?我会使用逗号分隔的字符串作为值:“alpha,beta”,然后将它们转换回带有拆分(“,”)的列表。如果我使用逗号分隔的字符串,那么我如何访问模板中的各个元素?看看我的答案是否有帮助听起来它可以解决问题,但实际上我想做的是获取列表中的每个元素并在模板中处理它。如果元素被连接成一个字符串,我该怎么做?您想在模板中如何处理它们?我假设您在代码的隐藏输入中使用了它们。。。您想有几个输入吗?除了将它们作为隐藏输入发送回来外,我还想创建一组单选按钮,该列表中的每个元素对应一个单选按钮。你可以在我这里遇到的一个相关问题中看到这一点:嗯。。。您可以在上下文中使用两个变量。。参见更新Alpha和Beta只是为了演示;事实上,列表可以有各种大小,因此它必须是一个列表,而不是固定数量的元素。
<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