python - 如何动态重新渲染模板?

标签 python jquery django

目前我正在尝试创建一个动态过滤器以在模板中列出模型对象。这是 Django View :

def view_data(request):
    text = request.GET.get('text')
    persons = None
    if text:
        try:
            persons = models.Person.objects.get(code__regex=text)
        except models.Person.DoesNotExist:
            pass
    return render(request, 'view_data.html',
                  {'persons': persons if not isinstance(persons, models.Person) else [persons]})

模板中的相关部分:

<div class="jumbotron row">
  <form>
    <label>Alanyok szűrése</label>
    <input id="filter" type="text" placeholder="Keresett alany">
  </form>
</div>

<div class="row">
  <div class="col-4">
    <div class="list-group" id="list-tab" role="tablist">
      {% for person in persons %}
        <a class="list-group-item list-group-item-action" id="list-{{person.code}}" data-toggle="list" href="#" role="tab" aria-controls="{{person.code}}">{{person.code}}</a>
      {% endfor %}
    </div>
  </div>
  <div class="col-8">
    <div class="visualisation content">
        <div class="canvas_div">
          <canvas id="Canvas1" width="540" height="250" style="border:1px solid #202020;">
          </canvas>
        </div>
    </div>
  </div>
</div>

带有 filter id 的输入字段有一个 keyup 事件回调,它向 django 发送请求,其中包含用于查询的输入字段的内容。 这是回调:

$( "#filter" ).keyup(function() {
    $.get("", {text: $('#filter').val()});
});

当我用 Pycharm 调试器检查它时,渲染器返回正确的 html,但在客户端,html 没有改变。如何使用新的对象列表重新渲染?

最佳答案

将要替换的部分 html 代码放入一个新的 html 文件中,如下所示:

new_html:

<div class="list-group" id="list-tab" role="tablist">
  {% for person in persons %}
    <a class="list-group-item list-group-item-action" 
       id="list-{{person.code}}" data-toggle="list" 
       href="#" role="tab" aria-controls="{{person.code}}">
       {{person.code}}
    </a>
  {% endfor %}
</div>

现在在您的 View 中用新的 html 文件替换您的旧 html 文件(您正在呈现的)的名称,如下所示:

 return render(request, 'new_html.html',
             {'persons': persons if not isinstance(persons,models.Person) else [persons]})

现在在您的 ajax 中,您可以像这样动态加载此 new_html:

 $( "#filter" ).keyup(function() {
    $.get("", 
          {text: $('#filter').val()},
          function(data){
              $( "#list-tab" ).replaceWith( data );
          } 
    );
});

关于python - 如何动态重新渲染模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54607312/

相关文章:

javascript - 如何使用 jQuery 应用于所有 href attr

django - 为什么 Django 没有 405 错误页面处理程序 - 不允许方法?

python - Django - 抽象基类模型破坏 syncdb

python - Django ( python ): DatabaseError : x Table has No Column named y

python - 在Docker Selenium Python中使用代理不起作用

javascript - 我使用的是jqgrid 4.6.0。无法获取可用列/在列选择器上添加列

javascript - 当知道同一层次结构中至少一个元素时,遍历到元素。使用 jquery 的结构

python - 如何识别 python 字典中的根节点?

python - 重复列表到最大元素数

Python - 不支持的操作数类型 - : 'int' and 'str'