Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Вывести первый экземляр модели обособленно [RSS Feed]

#1 Фев. 21, 2013 06:02:18

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Допустим вьюха выводит последние сообщения блога:

def blog_index(request):
    posts = BlogPost.objects.all()
    return render_to_response('index.html', {'posts': posts, 'user': request.user}, context_instance=RequestContext(request))

{% for post in posts %}
        <tr><td>
        Заголовок: <a href={% url blog_entry post.pk %}>{{ post.post_title }}</a><br>
        Автор: {{ post.post_author }}<br>
        Сообщение: {{ post.post_text }}<br>
        {% get_obj_perms user for post as "post_perms" %}
        {% if "edit_post" in post_perms %}
            <a href={% url edit_post post.pk %}>редактировать</a>
        {% endif %}
        {% if "delete_post" in post_perms %}
            <a href={% url delete_post post.pk %}>удалить</a>
        {% endif %}
        <br>
            {% get_comment_count for post as comment_count %}
        Комментариев: {{ comment_count }}
        <hr>
        </td></tr>
    {% endfor %}

И хочется, что последнее сообщение блога выводилось обособленно, в виде шапки. Как правильно оформить это в шаблоне, не могу сообразить? Вьюху для этого как-то менять мне кажется идеологически не правильным.

Офлайн

#2 Фев. 21, 2013 06:14:43

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Обычно последнее сообщение выводится первым на странице(в обратной же последовательности практикуется вывод в блогах)
В таком случае можно обращаться как posts.0
{{ posts.0.post_author }} - автор первого поста
А если надо именно последний в posts- тогда template_tag напишите, который получит posts и вернет последний элемент.

Офлайн

#3 Фев. 21, 2013 06:38:55

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Не в том вопрос, что первый-последний. А вопрос в том, что вокруг первого сообщения html код отличается от кода остальных, при том что на текущий момент там цикл for с единообразными итерациями. Для таких вещей надо тоже шаблонный тег писать?

Офлайн

#4 Фев. 21, 2013 06:48:17

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Тогда все еще проще.
есть же forloop.first
Вы можете первую итерацию через него ловить

{% for post in posts %}
     {% if forloop.first %}вывод 1 новости
     {% else %}вывод просто новости
     {% endif%}
{% endfor %}

Отредактировано nnmware (Фев. 21, 2013 06:50:27)

Офлайн

#5 Фев. 21, 2013 06:51:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Насколько понял Вы хотите этого?

{% for instance in list %}
    {% if forloop.first %}
         Some HTML
    {% else %}
         Another HTML
    {% endif %}
{% endfor %}
    



Офлайн

#6 Фев. 21, 2013 07:03:09

S
Зарегистрирован: 2012-04-25
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Точно! Спасибо! Глаза-глаза мои, слепошарые, ничего в доках не видят. Или просто не стоит читать доки в половине двенадцатого.

Офлайн

#7 Окт. 30, 2018 15:18:45

SergeyChmutov
Зарегистрирован: 2017-08-04
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Вопрос не совсем по теме, но схож.
Вот автор поста получает все данные модели из БД

 def blog_index(request):
    posts = BlogPost.objects.all()

Я же не могу это сделать, т.к. в импортированной модели не определяется метод .objects. Могу получить конкретные поля модели, но не все. В shell могу без проблем применить этот метод. В чем может быть причина?

Отредактировано SergeyChmutov (Окт. 30, 2018 15:20:44)

Прикреплённый файлы:
attachment objects_all.png (6,3 KБ)

Офлайн

#8 Окт. 30, 2018 17:38:46

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

SergeyChmutov
В модели Джанги ВСЕГДА есть objects, это результат работы метакласса. Если у вас этого нет, значит либо вы не наследуетесь от models.Model, либо вы делаете что то совсем противоестественное и вам придется показать сюда ваш код целиком

Офлайн

#9 Окт. 30, 2018 21:46:16

SergeyChmutov
Зарегистрирован: 2017-08-04
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

Papa_Svin
SergeyChmutovВ модели Джанги ВСЕГДА есть objects, это результат работы метакласса. Если у вас этого нет, значит либо вы не наследуетесь от models.Model, либо вы делаете что то совсем противоестественное и вам придется показать сюда ваш код целиком
models.py (модель унаследована от models.Model)
 from django.db import models
class Travels(models.Model):
    date = models.DateField(verbose_name='Дата поездки')
    city = models.CharField(verbose_name='Город', max_length=32)
    country = models.CharField(verbose_name='Страна', max_length=32)

view.py
 from django.shortcuts import render
from mainapp.models import Travels
def travel(request):
    page_header = 'Путешествия'
    travels = Travels.objects.all()
    return render(request, 'travels.html', {'page_header': page_header,
                                            'travels': travels})

При этом в shell'е
 >>> from mainapp.models import Travels
>>> travels = Travels.objects.all()
>>> travels
<QuerySet [<Travels: Travels object (1)>]>

Отредактировано SergeyChmutov (Окт. 30, 2018 21:47:42)

Офлайн

#10 Окт. 31, 2018 07:18:04

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Вывести первый экземляр модели обособленно

SergeyChmutov
Немного непонятно в чем проблема то? Где что не срабатывает, где ошибка возникает? какая ошибка? Если шаблон неправильно отрабатывает, так вы покажите шаблон.

Офлайн

  • Начало
  • » Django
  • » Вывести первый экземляр модели обособленно[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version