2013-04-23 2 views
2

Я хотел бы напечатать все пользовательские значения в моем шаблоне профиля. печать это вручную он работает: `Итерация над пользователем в шаблоне django

<table class="table table-striped table-bordered"> 
    <tr><th>{{ user.username }}</th></tr> 
    <tr><th>{{ user.first_name }}</th></tr> 
    <tr><th>{{ user.last_name }}</th></tr> 
    <tr><th>{{ user.email }}</th></tr> 
</table>` 

но такой подход не работает: `

<table class="table table-striped table-bordered"> 
    {% for field in user.fields %} 
     <tr> 
      <td>{{ field.name }}</td> 
      <td>{{ field.value }}</td> 
     </tr> 
    {% endfor %} 
</table> 

Я был tryintg использовать этот подход Iterate over model instance field names and values in template

Любые намеки?

ответ

2

В экземплярах модели нет атрибутов, называемых полями.

Если вы действительно хотите что-то вроде этого:

views.py:

d = {} 

for each in u._meta.fields: 
    d[each.name] = getattr(u, each.name) 

шаблона:

{% for k,v in d.items %} 
    {{k}} 
    {{v}} 
{% endfor %} 
0

Вы должны убедиться, что вы отправляете сам объект пользователя через файл views.py (не user.username или user.first_name и т. Д.). Таким образом, вы можете написать в своем шаблоне:

<table class="table table-striped table-bordered"> 
     {% for field in user %} 
      <tr> 
       <td>{{ field.name }}</td> 
       <td>{{ field.value }}</td> 
      </tr> 
     {% empty %} 
      <tr> 
       <td>No "user" field</td> 
      </tr> 
     {% endfor %} 
</table> 

Обратите внимание на изменение во второй строке («для поля в пользователе»).

+1

[для ... пусто] (https: //docs.djangoproject .com/en/dev/ref/templates/builtins/# for-empty) выглядит лучше, я думаю. – soon

+0

Спасибо, ты прав. Будет редактировать это в моем коде. – jball037

Смежные вопросы