You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:40:40