Django实现筛选10周岁及以上用户并在HTML展示的方法
实现Django筛选10周岁及以上用户并展示
1. 视图层筛选逻辑
要精准筛选出满10周岁(含当天)的用户,需计算当前日期往前推10年的节点,只要用户出生日期小于等于该节点即符合条件。以下是ORM筛选逻辑:
from datetime import datetime, timedelta from django.shortcuts import render from .models import User # 替换为你的实际模型类名 def eligible_users(request): # 计算10年前的当日日期(忽略时间部分,避免时间差导致筛选遗漏) cutoff_date = datetime.today() - timedelta(days=365*10) # 筛选非空出生日期且日期部分小于等于 cutoff 的用户 eligible_users = User.objects.filter( date_of_birth__isnull=False, date_of_birth__date__lte=cutoff_date.date() ) return render(request, 'eligible_users.html', {'users': eligible_users})
补充:若需更精准处理闰年,可安装python-dateutil库后用relativedelta替代timedelta,代码改为:from dateutil.relativedelta import relativedelta; cutoff_date = datetime.today() - relativedelta(years=10),自动适配闰年天数差异。
2. 模板层展示
创建HTML模板eligible_users.html,循环渲染符合条件的用户:
<!DOCTYPE html> <html> <head> <title>10周岁及以上用户列表</title> </head> <body> <h1>10周岁及以上用户</h1> {% if users %} <ul> {% for user in users %} <li>{{ user.username }} - 出生日期:{{ user.date_of_birth|date:"Y-m-d" }}</li> {% endfor %} </ul> {% else %} <p>暂无符合条件的用户</p> {% endif %} </body> </html>
说明:用|date:"Y-m-d"过滤器格式化日期,优化展示可读性;若项目启用时区,需替换datetime.today()为django.utils.timezone.now(),确保时间计算符合项目时区配置。
内容的提问来源于stack exchange,提问作者Eliki Bula
相关产品推荐
相关产品推荐

