Найти - Пользователи
Полная версия: Вывести первый экземляр модели обособленно
Начало » Django » Вывести первый экземляр модели обособленно
1 2
S
Допустим вьюха выводит последние сообщения блога:
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 %}

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

S
Не в том вопрос, что первый-последний. А вопрос в том, что вокруг первого сообщения html код отличается от кода остальных, при том что на текущий момент там цикл for с единообразными итерациями. Для таких вещей надо тоже шаблонный тег писать?
nnmware
Тогда все еще проще.
есть же forloop.first
Вы можете первую итерацию через него ловить
{% for post in posts %}
     {% if forloop.first %}вывод 1 новости
     {% else %}вывод просто новости
     {% endif%}
{% endfor %}

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

{% for instance in list %}
    {% if forloop.first %}
         Some HTML
    {% else %}
         Another HTML
    {% endif %}
{% endfor %}
    
S
Точно! Спасибо! Глаза-глаза мои, слепошарые, ничего в доках не видят. Или просто не стоит читать доки в половине двенадцатого.
SergeyChmutov
Вопрос не совсем по теме, но схож.
Вот автор поста получает все данные модели из БД
 def blog_index(request):
    posts = BlogPost.objects.all()

Я же не могу это сделать, т.к. в импортированной модели не определяется метод .objects. Могу получить конкретные поля модели, но не все. В shell могу без проблем применить этот метод. В чем может быть причина?
Papa_Svin
SergeyChmutov
В модели Джанги ВСЕГДА есть objects, это результат работы метакласса. Если у вас этого нет, значит либо вы не наследуетесь от models.Model, либо вы делаете что то совсем противоестественное и вам придется показать сюда ваш код целиком
SergeyChmutov
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)>]>
Papa_Svin
SergeyChmutov
Немного непонятно в чем проблема то? Где что не срабатывает, где ошибка возникает? какая ошибка? Если шаблон неправильно отрабатывает, так вы покажите шаблон.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB