Я пытаюсь показать свои последние 3 сообщения с помощью Django, но три моих сообщения не отображаются на моей странице. Вот мой код. У меня нет ошибок или чего-то еще, когда я загружаю страницу и другие мои сообщения на моей странице. И будьте добры, я впервые использую Python и Django =)

Models.py

from django.db import models
from django.utils import timezone

class Category(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name

class Post(models.Model):
    author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(
    blank=True, null=True)
    category = models.ForeignKey('Category')

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

Взгляды

from django.shortcuts import render
from django.utils import timezone
from .models import Category, Post

def category_list(request):
    categories = Category.objects.all()
    return render (request, 'blog/post_list.html', {'categories': categories})

def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
latests = Post.objects.filter(published_date__lte=timezone.now()).reverse()[:3]
return render(request, 'blog/post_list.html', {'posts': posts})
return render(request, 'blog/post_list.html', {'latests': latests})

Мои URL

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.post_list, name='post_list'),
]

Шаблон html (post_list.html)

        <div id="container">
        {% for latest in latests %}
        <article class="lastnews">
            <h4>{{ latest.title }}</h4>
            <h5 class="lastestcategory">{{ latest.category }}</h5>
            <p class="bodysmall">{{ latest.text|truncatewords:10 }}</p>
            <div>
                <p class="date">{{ latest.published_date }}</p>
                <p class="showmore"><a href="">Show more</a></p>
            </div>
        </article>
        {% endfor %}
    </div>
</section>
<section id="posts">
    {% for post in posts %}
    <article class="post">
        <header class="postheader">
            <h4>{{ post.title }}</h4>
            <p class="info">{{ post.category }}, {{ post.published_date }}</p>
        </header>
        <p class="bodyregular">{{ post.text|linebreaksbr }}</p>
        <footer class="postfooter">
            <p class="author">Author: {{ post.author }}</p>
            <p class="showarticle"><a href="">Show article</a></p>
        </footer>
    </article>
    {% endfor %}
</section>

Спасибо за вашу помощь =)

РЕДАКТИРОВАТЬ

Я зафиксировал свое мнение таким образом

def latest_posts(request):
latests = Post.objects.filter(published_date__lte=timezone.now()).reverse()[:3]
return render(request, 'blog/post_list.html', {'latests': latests})

Но три сообщения не появляются на моей странице

1
Damiano 17 Сен 2018 в 21:56

2 ответа

Лучший ответ

Я наконец нашел свою ошибку. Я попытался сделать два возврата в одном определении, но это не сработало. Я объединил два возврата в один, и это сработало! Спасибо всем за помощь моему :)

0
Damiano 18 Сен 2018 в 21:01

Вот твоя проблема

def latest_posts(request):
    latests = Post.objects.filter(published_date__lte=timezone.now()).reverse()[:3]
    return render(request, 'blog/post_list.html', {'latest': latest})

Вы определили latests в строке 2, но передали latest в строке 3. А затем в своем шаблоне вы вернулись к latests, поэтому вы хотите:

def latest_posts(request):
    latests = Post.objects.filter(published_date__lte=timezone.now()).reverse()[:3]
    return render(request, 'blog/post_list.html', {'latests': latests})
1
HenryM 17 Сен 2018 в 20:52