通过django将数据从数据库返回到UI

时间:2018-03-06 14:00:20

标签: python html django

有人能告诉我为什么我的html中没有显示信息吗?

views.py

@login_required(login_url="http://127.0.0.1:8000/accounts/login/")
def userprofile(request):
    data = UserProfile.objects.all()
    return TemplateResponse(request, 'personalInfo/details.html', {"data": data})

urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^details/$', views.userprofile, name='patient'),
]

models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    fullName = models.CharField(max_length = 250, default='', blank=True)
    address = models.CharField(max_length = 250, default='', blank=True)
    gender = models.CharField(max_length = 250, default='', blank=True)
    dob = models.DateField(blank=True)
    homePhone = models.CharField(max_length = 250, default='', blank=True)
    personalPhone = models.CharField(max_length = 250, default='', blank=True)
    emergencyContact = models.CharField(max_length = 250, default='', blank=True)
    email = models.CharField(max_length = 250, default='', blank=True)
    ppsn = models.CharField(max_length = 250, default='', blank=True)
    maritalStatus = models.CharField(max_length = 250, default='', blank=True)
    employment = models.BooleanField(blank=True)
    personalPic = models.CharField(max_length = 250, default='', blank=True)

def __str__(self):
    return self.fullName + ' - ' + self.ppsn

我正在使用{{ userprofile.fullbame }}来返回此人的姓名。我也使用配置文件与每个用户的一对一链接。 我想要发生的是当用户登录时,他自己的信息显示为当然像个人资料。

1 个答案:

答案 0 :(得分:0)

@login_required(login_url="http://127.0.0.1:8000/accounts/login/")
def userprofile(request):
    data = UserProfile.objects.all()
    return TemplateResponse(request, 'personalInfo/details.html', {"data": data})

这是所有用户个人资料。你可以通过以下方式遍历它们:

{% for profile in data %}
  {{ profile.fullName }}
{% endfor %}

但是看起来好像要显示登录用户的配置文件。为此,您需要将视图更改为:

# it's tidier to leave out `login_url` here, and add LOGIN_URL to your settings if required
@login_required
def userprofile(request):
    profile = request.user.userprofile
    return TemplateResponse(request, 'personalInfo/details.html', {"profile": profile})

现在,您可以在模板中执行

{{ profile.fullName }}

请注意,大写是很重要的。如果您的模型中有fullName,那么profile.fullname将无法在模板中使用。请注意,Django中字段名称的推荐样式为lowercase_with_underscores,即full_name