不能在django模板中使用数据库的字段

时间:2013-10-18 17:39:22

标签: django django-models django-templates django-views

我有一个这样的数据库:

from django.db import models


class User(models.Model):
    firstName = models.CharField(max_length=30, blank=False, default=None)
    lastName = models.CharField(max_length=30, blank=False, default=None)
    email = models.EmailField(max_length=100, blank=False, default=None)
    password = models.CharField(max_length=100, blank=False, default=None)
    score = models.IntegerField(default=0)
<{1>} views.py我想发送当前登录的user并在模板中显示DB的信息。
我的views.py

user = User.objects.filter(email=request.POST['email'])
#some code ....
context = RequestContext(request, {
    'user': user[0]
})
return HttpResponse(template.render(context))

我的模板:

{% if user %}
    Wellcome {{ user.firstName }}
{% endif %}

但在welcome后我没有看到任何内容。当我使用它时:

{% if user %}
    Wellcome {{ user }}
{% endif %}

我看到welcome anonymousUser我错了?

2 个答案:

答案 0 :(得分:2)

您不能使用user作为上下文变量,因为它与处理器注入上下文的user对象冲突

django.contrib.auth.context_processors.auth

现在,要解决您的问题,请将user重命名为user_obj或更有意义的内容。

阅读more here

答案 1 :(得分:1)

根据您描述的行为,您可能无法从调用过滤器返回任何对象:

user = User.objects.filter(email=request.POST['email'])

我会查看从request.POST['email']返回的值,并确保以数据库中的值作为起点。

此外,您应该知道过滤器函数返回QuerySet而不是User对象。如果要检索唯一的User对象,可以使用get function代替。