所以我试图获得最新的帖子,我遇到了一个问题,它不会显示帖子
views.py
def latest_post(request):
latest = Post.objects.all().order_by('-id')[:1]
context = {'latestPost': latest}
return render(request, 'latest_post.html', context)
注意:我也尝试过这个,最新= Post.objects.all()
数据库中有条目,我用shell测试
from blog.models import Post
>>> Post.objects.all()
<QuerySet [<Post: test>, <Post: okay so>, <Post: okay-okay>]>
latest_post.html
{% for newest in latestPost %}
<section class="hero is-primary is-medium">
<div class="hero-body header">
<div class="container">
<div class="font">
<h1 class="title is-1">
<span id="blog_title">{{ newest.title }}</span>
</h1>
<h2 class="subtitle is-3 subup">
<span id="blog-subtitle">{{ newest.content|truncatechars:20|safe }}</span>
</h2>
<h2 class="subtitle is-5 dateup">
<span id="blogdate">{{ newest.timestamp }}</span><br><br>
<a href="{{ newest.blog_url }}" class="button is-danger is-large is-inverted">Read More >></a>
</h2>
</div>
</div>
</div>
</section>
{% endfor %}
在我的blog_index.html中,我有以下内容
{% extends "blog_base.html" %}
{% block blog_main %}
{% load staticfiles %}
{% include 'latest_post.html' %}
<p> other html here </p>
{% endblock %}
Latest_post.html仅在我不使用时使用{%include'state_post.html'%}时显示
{% for newest in latestPost %}
{% endfor %}
所以我确信在某个地方没有任何打字错误阻止latest_post.html显示在我的索引页面中。
my models.py
class Post(models.Model):
title = models.CharField(max_length=120)
slug = models.SlugField(unique=True)
content = models.TextField()
draft = models.BooleanField(default=False)
publish = models.DateField(auto_now=False, auto_now_add=False)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
def __str__(self):
return self.title
def blog_url(self):
return reverse("blogposts:blogdetail", kwargs={"slug": self.slug})
附加说明:python3,django 1.11,sqlite。 此外,控制台中不显示任何错误。任何帮助,将不胜感激!谢谢!!
答案 0 :(得分:1)
看起来您正在将上下文变量直接传递给latest_post.html
:
return render(request, 'latest_post.html', context)
但latestPost
中没有这样的上下文变量blog_index.html
。
您需要做的是向blog_index.html
添加上下文。将其添加到index
视图中:
latest = Post.objects.all().order_by('-id')[:1]
context = {'latestPost': latest}
return render(request, 'blog_index.html', context)
此外,您可以使用http://www.bootlint.com/选择查询集中的第一个元素。
答案 1 :(得分:0)
在之前的代码中,您使用[:1]
来限制它,因此它只返回一个项目。然后你在一个项目上再次使用forloop。不是最好的做事方式。
你是否只想从帖子中获得一个项目?如果是,则不需要Forloop将
latest_post.html
更改为
<section class="hero is-primary is-medium">
<div class="hero-body header">
<div class="container">
<div class="font">
<h1 class="title is-1">
<span id="blog_title">{{ latestPost.title }}</span>
</h1>
<h2 class="subtitle is-3 subup">
<span id="blog-subtitle">{{ latestPost.content|truncatechars:20|safe }}</span>
</h2>
<h2 class="subtitle is-5 dateup">
<span id="blogdate">{{ latestPost.timestamp }}</span><br><br>
<a href="{{ latestPost.blog_url }}" class="button is-danger is-large is-inverted">Read More >></a>
</h2>
</div>
</div>
</div>
</section>
您甚至不需要在视图中使用[:1]
。有更好的方法来做到这一点
答案 2 :(得分:0)
我也遇到了同样的问题,我该死的确认我犯了任何愚蠢的错误。
不幸的是,我找到了一个。所以, 试试这个:
document.cookie
代替:
context = {'latest': latest}
我希望它有效。