Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将列表作为上下文变量发送,然后通过POST再次发送_Django - Fatal编程技术网

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

Django 将列表作为上下文变量发送,然后通过POST再次发送,django,Django,假设在我的视图中,我有一个字符串列表,我将其作为上下文变量发送给模板。然后在该模板中,有一个提交的表单。该表单上的一个字段是隐藏字段,设置为与上下文中的此列表相等。在我看来,当我从请求的POST对象中读取此列表时,该列表似乎已将所有字符从原始列表中分离出来,并将每个字符设置为其自己的元素 例如,如果我的原始列表是['alpha','beta',],那么通过请求的POST对象从我的模板返回的列表将显示为['a','l','p','h','a','b','e','t','a'] 1) 为什么会发生这

假设在我的视图中,我有一个字符串列表,我将其作为上下文变量发送给模板。然后在该模板中,有一个提交的表单。该表单上的一个字段是隐藏字段,设置为与上下文中的此列表相等。在我看来,当我从请求的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 = 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