jquery - 如何在返回的 AJAX 调用上使用 Django 模板标签?

标签 jquery python ajax django

我有一个简单的 AJAX 脚本,它在名为 AJAXBox 的搜索字段中输入一个字符串,并调用一个 View 函数,该函数使用过滤器查询数据库并返回与输入的匹配的所有用户对象的查询集范围。当我使用 Django 模板标签遍历查询集时,它不起作用。我认为这是因为我的 Javascript 调用的输出实际上并没有输出查询集,而是输出了 django 模板无法识别的某种类型的字符串。我怎样才能解决这个问题,以便我的 AJAX 调用返回真正的 django 兼容查询集,而 django 中的正常渲染函数输出?

AJAX 的 JS:

$(document).ready(function(){

$('#AJAXBox').keyup(function()  {

    var searchedterm;
    searchedterm = $(this).val();
    $.get('/AJAXsearch/', {searchterm: searchedterm}, function(data){
        $('#result').html(data);

      });       

    });  
});

python 代码的 tl;dr 本质上是:

def AJAXsearch(request):
    searchterm = request.GET['searchterm']
    result = UserObj.objects.filter(person_name=searchterm)
    return HttpResponse(result)

当我转到模板中的 html 并执行类似操作时:

<div id="result">
    {% for person in result %}
        {{person.property}}
    {%endfor%}
</div>

模板标签循环不做任何事情。事实上,我根本无法操纵/设计输出,它只是一串普通的用户名。

最佳答案

您没有在您的 View 中调用您的模板。

试试这个:

def AJAXsearch(request):
    searchterm = request.GET['searchterm']
    result = UserObj.objects.filter(person_name=searchterm)
    return render(request,"path/to/your/template.html", {"result":result})

根据评论,您将页面的主要代码与生成 <div> 的代码一起重复使用 block 。

在那种情况下,我建议将该 block 放入一个单独的文件中,比如 "resultlist.html"including that in your main template所以:

resultlist.html :

<div id="result" >
{% for person in result %}
{{person.property}}
{%endfor%} </div>

然后在userprofile.html :

{# Lots of code around the result list #}
{% include "resultlist.html" %}
{# Lots of code around the result list #}

关于jquery - 如何在返回的 AJAX 调用上使用 Django 模板标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30158658/

相关文章:

python - 通过在附加新行的同时替换旧数据,将新数据合并到旧数据中

python - 获取用户的输入,然后使用子流程启动流程

php - AJAX 返回数据淡入现有元素

python - PyMySQL 将(文件)数据加载到远程 MySQL 实例时出现错误/异常

jquery - 检查 jquery(js) 中的字段是否为空?

javascript - MVC 4 和 JQuery

javascript - 突出显示/设置文本区域格式

javascript - 在 Ajax 调用后跟随 ASP.NET ActionResult

php - jquery 选择列表和 $_POST 帮助

javascript - 从 JS 文字模板动态生成输入字段 : input values do not display