Django:如何根据日期在页面上展示用户输入日期对应的餐食数据
实现按日期筛选展示餐食的方案
步骤1:新增日期查询的URL路由
在你的URL配置文件中新增用于接收日期参数的路由:
# 支持传入YYYY-MM-DD格式的日期字符串 path('daily-meals/<str:date_str>/', views.daily_meals, name='daily_meals')
步骤2:新增按日期查询的视图函数
新增视图处理日期筛选逻辑,仅返回当前登录用户对应日期的餐食数据,避免越权访问:
from django.shortcuts import render, Http404 from datetime import datetime @login_required def daily_meals(request, date_str): # 校验日期格式合法性 try: target_date = datetime.strptime(date_str, "%Y-%m-%d").date() except ValueError: raise Http404("无效日期格式,请使用YYYY-MM-DD格式访问") # 筛选当前用户、指定日期的所有餐食 user_daily_meals = Meal.objects.filter(user=request.user, date=target_date) return render(request, 'meals/daily_meals.html', { 'meal_list': user_daily_meals, 'current_date': target_date })
步骤3:新增对应展示模板(示例)
创建meals/daily_meals.html模板渲染当日餐食列表:
<h2>{{ current_date }} 餐食记录</h2> {% if meal_list %} <ul> {% for meal in meal_list %} <li> <a href="{% url 'meal_details' meal.id %}"> {{ meal.get_name_display }} </a> </li> {% endfor %} </ul> {% else %} <p>该日期暂无餐食记录</p> {% endif %}
可选扩展:默认展示当日餐食
如果需要默认打开页面就展示当天的餐食,可以新增无参数路由和对应的重定向视图:
- URL配置新增:
path('daily-meals/', views.today_meals, name='today_meals')
- 新增视图:
from datetime import date from django.shortcuts import redirect @login_required def today_meals(request): today = date.today() return redirect('daily_meals', date_str=today.strftime("%Y-%m-%d"))
内容的提问来源于stack exchange,提问作者Erovring
相关产品推荐
相关产品推荐

