如何从视图传递上下文并在Django中的javascript中访问上下文数据?

时间:2019-01-28 17:31:46

标签: django

我正在django视图中的字典中传递一些数据,并且我想在我的javascript代码中访问字典数据以在html中显示数据。但是,每当我打印传递的上下文时,它只会在控制台上打印“成功”,而不是实际数据。

这是我的字典结构: context ['search_successful'] =“某个字符串” 在对视图进行Ajax调用后,我将此字典传递给了我的成功函数。目前,我只是传递HTTPResponse('true',context)。

在用javascript代码收集数据之后,我只想打印上下文的数据,这将在控制台上提供“某些字符串”,但每次都会获得成功。

这是我的观点:

def daily_object_search(request):
    context = {'search_successful': "No"}
    if request.method == 'POST':
        object_name = request.POST['search_object_name']
        print("The query for search :", object_name)
        if len(object_name) <= 2:
            print("The length of the object name :", len(object_name))
            return HttpResponse('invalid_query')
        my_cursor = mydb.cursor()
        sql = "select * from education_fruits where tag = '" + object_name + "'"
        my_cursor.execute(sql)
        result = my_cursor.fetchall()
        print(result)
        if my_cursor.rowcount <= 0:
            print("No object found")
            return HttpResponse('false')
        context['search_successful'] = "Yess"
    return HttpResponse('true', context)

这是我的模板:

<script type="text/javascript">
    $(document).on('submit', '#search_object', function(e){
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: '{% url 'daily_object_search' %}',
            data: {
               search_object_name: $('#search_my_object').val(),
               csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
            },
            success: function(data, context){
                if(data == "true"){
                    alert('This Object is Present');  
                    /* Print the context data by creating a html tag and appending the context information to a <h1> tag by doing document.id.innerHTML = context['search_successful']*/                                 
                    console.log(context);
                }
                else if(data == "invalid_query"){
                    alert("Please enter a valid object to be searched");
                }
                else{
                    alert('This object is not present');
                }
            }

        });
    });
</script>

控制台应该给我类似“ search_successful:是”或“ search_successful:否”的东西,但每次都会给我带来成功。请帮忙!预先感谢。

1 个答案:

答案 0 :(得分:0)

上下文字典可以传递给renderhttps://docs.djangoproject.com/en/2.1/topics/http/shortcuts/#render),在文档https://docs.djangoproject.com/en/2.1/ref/request-response/#httpresponse-objectsHTTPResponse中找不到上下文的引用

如果要返回复杂值,请在响应中返回json作为内容。 您始终将内容设置为true(经过编码),因此实际上并不能区分任何情况,在我看来这是无用的。

我建议您使用状态码来区分各种情况,例如invalid_query400 Bad Request,即No object found。在这种情况下,您应该在ajax调用中使用错误处理程序来捕获此否定响应。

如果您只想使用成功处理程序,则可以使用这样的json:

404 Not Found

因此,如果您希望传递获取的元素,则可以在json中添加密钥