Django将错误的查询结果传递给模板

时间:2012-08-28 07:59:02

标签: mysql django web

我正在编写一个显示用户个人资料的网络应用。

配置文件包括用户interest在其他用户中的显示,可以是单向或双向的。我使用django的User模型来处理身份验证和授权。

我遇到的问题是,在某些情况下,呈现的页面会显示先前执行的查询的数据。具体来说,当我在同一台计算机上使用该应用程序作为两个不同的用户但在不同的浏览器(OS X上的Chrome和Safari;使用django开发Web服务器)时,会发生这种情况。在我为用户1加载页面后,如果我为用户2重新加载页面,我会看到用户1的查询结果。

我通过将它们打印到控制台来确认我的查询是正确的。我认为问题可能出在Web服务器上,因为页面在服务器重启后立即加载了正确的查询。

有什么想法吗?

**编辑:正如Daniel指出的那样,问题是interest_view函数有一个字典作为默认参数。**


相关代码段:

models.py

class Profile(UserenaBaseProfile):
    user = models.OneToOneField(User, unique=True)

class Interest(models.Model):
    user = models.ForeignKey(User, related_name=u'interests')
    interest = models.ForeignKey(User)

views.py

from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext

def interest_view(request, username, extra_context={}):
    user = get_object_or_404(User, username__iexact=username)

    profile = user.get_profile()
    if not profile.can_view_profile(request.user):
        return HttpResponseForbidden("You can't view this page.")

    interests = Interest.objects.filter(user=user)
    if len(interests) > 0:
        extra_context['active_interests'] = interests

    return render_to_response('interest_detail.html',
                              extra_context,
                              context_instance=RequestContext(request)
    )

interest_detail.html

{% if active_interests %}
    {% for interest in active_interests %}
        <li>
            {{ interest.interest.first_name }} {{ interest.interest.last_name }}
        </li>
    {% endfor %}
{% endif %}

1 个答案:

答案 0 :(得分:2)

您没有显示任何代码,因此无法进行调试。但问题几乎肯定是你在模块级定义查询,它们在进程的生命周期中持续存在(这是很多请求)。

修改

嗯,我几乎是对的 - 这是在模块级别定义事物的问题,尽管在你的情况下它是Python的默认参数。请参阅the effbot以获得一个很好的解释,尽管默认的SO问题是:Least astonishment in Python