django通过网页的选择栏筛选
时间: 2023-10-15 10:04:37 浏览: 83
在 Django 中,可以通过使用 Django Form 和 Django QuerySet 来实现网页的选择栏筛选功能。以下是一个简单的例子:
首先,创建一个 Django Form,用于定义筛选条件:
```python
from django import forms
class FilterForm(forms.Form):
CHOICES = (
('', 'All'),
('male', 'Male'),
('female', 'Female'),
)
gender = forms.ChoiceField(choices=CHOICES, required=False)
```
在这个例子中,我们定义了一个 `FilterForm`,其中有一个 `gender` 字段,它是一个选择框,有三个选项:All、Male 和 Female。
然后,在视图函数中,我们可以使用 `FilterForm` 来接收用户提交的筛选条件,并使用 Django QuerySet 来过滤数据:
```python
from django.shortcuts import render
from .models import Person
from .forms import FilterForm
def person_list(request):
form = FilterForm(request.GET)
queryset = Person.objects.all()
if form.is_valid():
gender = form.cleaned_data['gender']
if gender:
queryset = queryset.filter(gender=gender)
return render(request, 'person_list.html', {'form': form, 'queryset': queryset})
```
在这个例子中,我们首先创建了一个 `FilterForm` 实例,然后使用 `request.GET` 来获取用户提交的数据。接着,我们使用 `Person.objects.all()` 来获取所有的 Person 实例,并使用 `if` 语句来判断用户是否提交了筛选条件。如果提交了 `gender` 字段,我们就使用 `filter()` 方法来过滤 queryset。最后,我们将 `form` 和 `queryset` 传递给模板,以显示结果。
最后,在模板中,我们可以使用 `form` 来显示筛选条件的选择框,使用 `queryset` 来显示筛选结果:
```html
<form method="get">
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% if queryset %}
<ul>
{% for person in queryset %}
<li>{{ person.name }} ({{ person.gender }})</li>
{% endfor %}
</ul>
{% endif %}
```
在这个例子中,我们首先使用 `form.as_p` 来将 `form` 显示为 HTML,然后在模板中使用 `if` 语句来判断是否有筛选结果。如果有,我们就使用 `for` 循环来遍历 queryset,并显示每个 Person 实例的名字和性别。
阅读全文