我正在编写一个显示用户配置文件的网络应用程序。
配置文件包括用户interest
在其他用户中的显示,可以是单向或双向的。我正在使用 django 包含的User
模型来处理身份验证和授权。
我遇到的问题是,在某些情况下,呈现的页面会呈现来自之前执行的查询的数据。具体来说,当我在同一台计算机上以不同浏览器(OS X 上的 Chrome 和 Safari;使用 django 开发 Web 服务器)上作为两个不同用户使用该应用程序时,就会发生这种情况。在我为用户 1 加载页面后,如果我为用户 2 重新加载页面,我会看到用户 1 的查询结果。
我通过将它们打印到控制台来确认我的查询是正确的。我认为问题可能出在网络服务器上,因为页面在服务器重新启动后立即加载了正确的查询。
有任何想法吗?
** 编辑:正如 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 %}