目前我正在尝试创建一个动态过滤器以在模板中列出模型对象。这是 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/