Django 上下文变量和 ajax 响应

Posted

技术标签:

【中文标题】Django 上下文变量和 ajax 响应【英文标题】:Django context variables and ajax response 【发布时间】:2012-04-16 10:21:09 【问题描述】:

我正在对我的博客进行基本搜索,基本功能已启动并正常工作。但是,我想知道的是,您是否可以在 ajax 响应中返回上下文变量,然后可以在模板中访问这些变量。这是我的搜索定义:

from django.http import HttpResponse
from django.db.models import Q
from django.core import serializers

def search(request):
    if request.is_ajax():
        query = request.POST['query']
        text_list = Text.objects.filter(Q(title__icontains=query) | Q(mytextfield__icontains=query))
        data = serializers.serialize("json", text_list)
    else:
        data = "whoops"
    return HttpResponse(data,'application/javascript')

这是通过 jquery 请求的。

$(document).ready(function() 
    $('#search').submit(function()
        $.post("/search/search/", $("#search").serialize(), function(data)
            // Search results for: **query**
            $.each(data, function(index)
                $(ajax).append(data[index].fields.title + "<br>");
            ); 
        , "json"); 
        return false
    );
);

我想要做的是将包含在 def 搜索中的 query 变量传回我的 jquery 函数。在常规的 http 响应中,您将使用上下文变量......但我不确定如何使用 jQuery 传递这些变量。

【问题讨论】:

【参考方案1】:

您可以做的是将字典传回您的 HttpResponse 而不仅仅是结果。

data = 
    'query': request.POST['query'],
    'results': serializers.serialize("json", Text.objects.filter(Q(title__icontains=query) | Q(mytextfield__icontains=query)))


return HttpResponse(json.dumps(data), 'application/javascript')

确保导入 json 或 simplejson。

【讨论】:

看起来很有前途的乔丹。我回家后试试看。

以上是关于Django 上下文变量和 ajax 响应的主要内容,如果未能解决你的问题,请参考以下文章

无法响应上下文处理器上的 AJAX 调用

Django 在 JQuery AJAX 请求中说 is_ajax 是错误的

JSON 序列化器和 Django 的替代 http 响应

使用 Ajax、Django 将上下文传递到模板中

django 中的上下文处理器与中间件

模板的 Django 上下文变量名称