抛出错误,指出上下文必须是字典而不是str

时间:2019-01-16 10:09:35

标签: django django-templates django-views

我是dJango的新手。 我想要的是将数据从view.py传递到.html以便处理来自模型的数据。

但是,我很难将数据从view传递到html页面。我的代码如下所示。

form.html

<!DOCTYPE html>
<meta charset="utf-8">
{% load staticfiles %}

<form method="post" action="../form/" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="files" multiple/>
    <input type="submit" value="Upload"/>
</form>


<form method="post" action="../form/" enctype="multipart/form-data">
    {% csrf_token %}
    {% for c in column_name %}
    <tbody>
        <tr>
            <td>{{c}}</td>
            <td><input type="checkbox" name="columns" value="{{c}}"></td>
        </tr>
    </tbody>
    {% endfor %}
    {% if column_name %}
     <input type="submit" value="Submit">
    {% endif %}
</form>

<script>
var data = {{ columns_dict|safe }};
console.log(data);
</script>

views.py

def Form(request):
    if request.method == 'POST':
        if len(request.FILES) !=0:
            file = request.FILES['files']
            column_name = upload_file_name(file)
            return render(request,"index/form.html",{"column_name":column_name})
        else:
            columns = request.POST.getlist('columns')
            print(columns)
            columns_dict = dict(columns)
            print(columns_dict)
            return render(request,"index/form.html",json.dumps(columns))
    else:
        return render(request,"index/form.html",{})

如您所见,我一直在尝试在下面的代码中传递数据。 return render(request,"index/form.html",json.dumps(columns))

但是,在html页面中,脚本块

<script>
var data = {{ columns_dict|safe }};
console.log(data);
</script>

它无法显示来自view.py的数据。 我可以在下面看到错误。 context must be a dict rather than str.

如何解决我的问题?

1 个答案:

答案 0 :(得分:2)

如果要在模板中从视图传递数据,则必须在字典中传递数据。

def my_view(request):
   # statements
   return render('myhtml.html', {'data': json.dumps(data)})

Reference