2017-02-08 2 views
0

Как сделать то же самое для детального просмотра?Django отображает несколько моделей в одном шаблоне

views.py

class ViewProfile(generic.DetailView): 
    model = User 
    slug_field = 'username' 
    template_name = 'profile/profile_view.html' 

    def get_context_data(self, **kwargs): 
     ctx = super(ViewProfile, self).get_context_data(**kwargs) 
     ctx['profile'] = Profile.objects.all() 
     return ctx 

profile_view.html

<h1>{{ user.username }}</h1> 
{% for profile in profile %} 
<p>{{ profile.full_name }}</p> 
{% endfor %} 

мне нужно отобразить только первый в списке как подробном представлении. любые методы?

+0

Вы передали итерированную переменную с тем же именем, что итератор, просто сделайте их разными – Sayse

+0

i am beginner .. можете ли вы показать пример? –

ответ

0

Вы дали Итерированный переменной совпадает с именем итератора, просто сделать их разными

{% for prof in profile %} 
<p>{{ prof.full_name }}</p> 
{% endfor %} 
+0

Я не показываю список. это один элемент. for loop используется только для просмотра списка справа? в настоящее время iam добавляет срез, чтобы получить только первый элемент. –

+0

Вы уже добавили «профиль» в свои данные контекста, цикл for - для итерируемых данных. – Sayse

0

Использование first() method на QuerySet

views.py

class ViewProfile(generic.DetailView): 
    model = User 
    slug_field = 'username' 
    template_name = 'profile/profile_view.html' 

    def get_context_data(self, **kwargs): 
     ctx = super(ViewProfile, self).get_context_data(**kwargs) 
     # profile in your context will contain only the first profile 
     ctx['profile'] = Profile.objects.all().first() 
     return ctx 

profile_view.html

<h1>{{ user.username }}</h1> 
<p>{{ profile.full_name }}</p> 

Вы также можете использовать order_by() method, чтобы изменить порядок запроса.

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