Django模板视图如何正确展示HealthStats数据并过滤当前用户记录?
问题解决方法
1. 模板字段无法显示的修复
你模板里的变量没有关联到循环的stat对象,直接写{{ weight }}这类变量Django无法匹配到对应数据,必须通过循环变量stat来访问每个字段:
修改health_hub_history.html中的循环部分:
{% for stat in stats %} <tr> <td>{{ stat.user }}</td> <td>{{ stat.weight }} </td> <td>{{ stat.date }}</td> <td>{{ stat.run_distance }}</td> <td>{{ stat.run_time }}</td> </tr> {% endfor %}
2. 过滤当前登录用户的记录
要只展示当前登录用户的健康数据,需要在视图里通过filter方法筛选,同时建议用LoginRequiredMixin确保只有登录用户能访问该页面:
修改Views.py:
from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import TemplateView from .models import HealthStats class HealthHistory(LoginRequiredMixin, TemplateView): model = HealthStats template_name = 'health_hub_history.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 仅筛选当前登录用户的记录 context['stats'] = HealthStats.objects.filter(user=self.request.user) return context
额外优化提示
如果想简化代码,可以用ListView替代TemplateView,它默认处理列表数据查询,代码更简洁:
from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import ListView from .models import HealthStats class HealthHistory(LoginRequiredMixin, ListView): model = HealthStats template_name = 'health_hub_history.html' context_object_name = 'stats' def get_queryset(self): return HealthStats.objects.filter(user=self.request.user)
内容的提问来源于stack exchange,提问作者BenD2525
相关产品推荐
相关产品推荐

