帮我写一段django代码,实现将filter查询数据库结果,使用ajax渲染到前端
时间: 2023-12-28 10:06:21 浏览: 133
基于ajax的查询实现
好的,这里是一个简单的例子:
在模型中定义一个名为 `Person` 的模型:
```python
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=50)
age = models.IntegerField()
```
在视图中定义一个函数用于处理 AJAX 请求:
```python
from django.shortcuts import render
from django.http import JsonResponse
from .models import Person
def get_persons(request):
if request.is_ajax():
name = request.GET.get('name')
persons = Person.objects.filter(name__icontains=name).values('name', 'age')
return JsonResponse({'persons': list(persons)})
return render(request, 'index.html')
```
在模板中定义一个输入框和一个列表用于显示结果:
```html
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Django AJAX Example</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$('#search-button').click(function() {
var name = $('#search-input').val();
$.ajax({
url: '/get_persons/',
data: {'name': name},
success: function(response) {
var persons = response.persons;
var html = '';
for (var i=0; i<persons.length; i++) {
html += '<li>' + persons[i].name + ' - ' + persons[i].age + '</li>';
}
$('#person-list').html(html);
}
});
});
});
</script>
</head>
<body>
<input type="text" id="search-input">
<button id="search-button">Search</button>
<ul id="person-list"></ul>
</body>
</html>
```
在路由中定义一个 URL 用于处理 AJAX 请求:
```python
from django.urls import path
from .views import get_persons
urlpatterns = [
path('', get_persons, name='get_persons'),
]
```
以上代码实现了一个简单的 AJAX 实时搜索功能,当用户在输入框中输入姓名并点击搜索按钮时,会向服务器发送 AJAX 请求,服务器会过滤 `Person` 模型中与搜索关键词匹配的结果,并将结果返回给前端页面,最后前端页面会将结果渲染到列表中。
阅读全文