获取所有用户字段以显示在django模板中的配置文件页面上?

时间:2014-03-27 18:38:07

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

我希望遍历User模型和UserProfile附加的User模型,以在个人资料页面中显示有关用户的所有信息,例如

UserName:
FirstName:
LastName:
Date of Birth:
.....

是否有通用的templateView,我可以使用它来传递模型并将其字段显示在模板上。读了很多SO文章,我试过这个:

 ##display user fields
    {% for field in User._meta.get_all_field_names() %}
       <p> {{ field }} : {{ getatttr(field,user) }} </p>
     {% endfor %}
     ## display Userprofile fields
     {for field in User.profile._meta.get_all_field_names() %}
          <p> {{ field }} : {{ getatttr(field,user.profile) }} </p>
     {% endfor %}

这不起作用: 事实上,我只尝试显示所有字段而不是其值:

{% for field in User._meta.get_all_field_names() %}
        <p> {{ field }} </p>
     {% endfor %}

但我收到此错误:Variables and attributes may not begin with underscores: 'User._meta.get_all_field_names'

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

您可以将此代码推送到您的视图,并使用方便的django.forms.models.model_to_dict函数获取字段字典,以获取useruser.profile

的值

views.py:

from django.forms.models import model_to_dict

class UserDetailView(DetailView):

    model = User

    def get_context_data(self, **kwargs):
        context = super(UserDetailView, self).get_context_data(**kwargs)
        context['user_attr_map'] = model_to_dict(self.object)
        context['userprofile_attr_map'] = model_to_dict(self.object.profile)
        return context

template.html:

{% for k, v in user_attr_map.items %}
    <p> {{ k }} : {{ v }} </p>
{% endfor %}
{% for k, v in userprofile_attr_map.items %}
    <p> {{ k }} : {{ v }} </p>
{% endfor %}