如何将对象发送回Django视图并通过索引访问它

时间:2017-07-12 15:30:45

标签: python django

在我的HTML中,我有一个对象data。。Data最初是从views.py中的Django中的SQL查询中检索的,并使用render()传递给HTML

data看起来像这样

data1= {
        0:{
            pk:1,
            model:"binaryQuestionApp.painting",
            fields: {title:'Pearl',artist:"vermeer"},
        },
        1:{
            pk:2,
            model:"binaryQuestionApp.painting",
            fields: {title:'Sand',artist:"vermeer"},
        }
    }

我使用以下JS,所以将data发送回views.py(我使用this question创建csrftoken)

function post_data() {
    var postdata = {
        'data': data,
        'csrfmiddlewaretoken': csrftoken
    };
    $.post('', postdata); // POST request to the same view I am now
};

现在,数据正在发送回服务器,但我无法访问它。我在views.py

中有这个
if request.method == 'POST':
    data = request.POST
    # so far it works. But i can not index like this:
    print(data[0]['pk']
    # instead I need to index it strangely, like this:
    print(data['data[0][pk]']) # note the entire key is a string

如何将数据发送到Django,以便我可以使用数据[0] [' pk']在views.py中访问它?

1 个答案:

答案 0 :(得分:0)

我自己想通了。

首先,您需要将对象解析为JSON。

var postdata = {
    data: JSON.stringify(data),
    'csrfmiddlewaretoken': csrftoken
};

然后postdata可以使用(注意$,这用jquery)

发送
$.post('', postdata); // POST request to the same view I am now

在服务器端,在views.py中,您需要使用get()方法:

import json 
def index(request):

    if request.method == 'POST':
        data = request.POST.get('data')
        data = json.loads(data)
        print(data[0]['model'])  # this indexing will depend on your own setup, works just like any python dict