Как я могу заказать записи записей в шаблоне Django - PullRequest
0 голосов
/ 05 мая 2018

Я сделал свою модель поста, где храню всю информацию поста, такую ​​как заголовок, тело, теги и так далее. И я связал его с моим шаблоном индекса с помощью цикла for:

<!-- Blog Post -->
      {% for blog in object_list %}
        <div class="card mb-4">
          <div class="card-body">
            <h4 id="post_title" class="card-title">{{blog.title}}</h2>
            <div id="post_body" class="card-text">{{blog.formatted_markdown|safe}}</div>
            <a href="details/{{blog.id}}" class="btn btn-primary">Read More</a>
          </div>
          <div class="card-footer text-muted">
            <p id="foot_page">{{blog.date}}</p>
            <a id="foot_page" href="#">{{blog.author}}</a>
          </div>
        </div>
      {% endfor %}

И когда я запускаю свой сервер, сообщение появляется в блоге, упорядоченном по возрастанию pub_date, поэтому новые появляются, задерживая старые.

Что я могу сделать, чтобы новое сообщение появилось сверху?

Вот мой класс модели Post, если он полезен:

class Post(models.Model):
    title = models.CharField(max_length=255)
    body = MarkdownxField()
    tags = models.ManyToManyField(Tag)
    author = models.CharField(max_length=255, default='Raúl Chirinos')
    date = models.DateTimeField(auto_now_add=True, blank=True)

    @property
    def formatted_markdown(self):
        return markdownify(self.body)

    def __str__(self):
        return self.title

Я управлял представлениями в файле urls:

from django.conf.urls import url
from django.urls import include, path
from django.contrib import admin
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView

from raulchirinos.models import Post

app_name = 'raulchirinos'
urlpatterns = [
    url(r'^markdownx/', include('markdownx.urls')),
    url(r'^admin/', admin.site.urls, name='admin-site'),
    url(r'^$', ListView.as_view(model=Post, template_name='raulchirinos/index.html'), name='index'),
    url(r'^details/(?P<pk>[0-9]+)/$', DetailView.as_view(model=Post, template_name='raulchirinos/post_template/post.html'), name='post_details'),
]

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

У вас есть несколько вариантов в зависимости от уровня, на котором вам нужно выполнить заказ:

  1. Установите мета-подкласс для вашей модели Post с атрибутом ordering, установленным в порядке убывания date. Смотри: https://docs.djangoproject.com/en/2.0/ref/models/options/#ordering
class Post(models.Model):
    # ...
    class Meta:
        ordering = ["-date"]
  1. Закажите данные из модуля в вашем представлении, прежде чем передавать их в контекст.
  2. Обратный цикл for в шаблоне.

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

0 голосов
/ 05 мая 2018

Добавьте мета класс к моделям и установите сортировку в соответствии с вашими требованиями.

Пример:

class Post(models.Model):
    title = models.CharField(max_length=255)
    body = MarkdownxField()
    tags = models.ManyToManyField(Tag)
    author = models.CharField(max_length=255, default='Raúl Chirinos')
    date = models.DateTimeField(auto_now_add=True, blank=True)

    class Meta:
        ordering = ['-date']

    @property
    def formatted_markdown(self):
        return markdownify(self.body)

    def __str__(self):
        return self.title
...