我正在使用Django 1.8.6和python 3.6。我是django和python的新手,试图创建一个博客。我无法从数据库中检索数据。即使它存在于数据库中
我的model.py
class Post(models.Model):
STATUS_CHOICES = (('draft', 'Draft'), ('published','Published'), )
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
author = models.ForeignKey(
User,
blank=True,
null=True, )
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(
max_length=10, choices=STATUS_CHOICES, default='draft')
objects = models.Manager() # The default manager
published = PublishedManager() # custom manager
class Meta:
ordering = ('-publish', )
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse(
'blog:post_detail',
args=[
self.publish.year, self.publish.strftime('%m'),
self.publish.strftime('%d'), self.slug
])
处理此模型的视图是
def post_detail(request, year, month, day, post):
post = get_list_or_404(
Post,
slug=post,
status='published',
publish__year=year,
publish__month=month,
publish__day=day)
return render(request, 'blog/post/detail.html', {'post': post})
当我们获取数据的html模板
<p>Published {{ post.pulish }} by {{ post.author }}</p>
输出正好 “由”
发布但是当我只使用
时 {{ posts }}
我得到输出
[<Post: this is Me>]
“这是我”是保存在数据库中的帖子的标题
提前感谢您的时间和精力。如果您告诉我问题是什么,那将会很有帮助。
答案 0 :(得分:3)
您的HTML模板需要遍历结果集(即使只有一个帖子)
{% for post in posts %}
<p>Published {{ post.publish }} by {{ post.author }}</p>
{% endfor %}
它应该是publish
而不是pulish
或者,如果您不想遍历结果集,则可以执行
<p>Published {{ post.0.publish }} by {{ post.0.author }}</p>
其中0
是第一条记录的索引。
这是因为数据库总是返回所谓的结果集 - 无论您使用何种编程语言,都是行的集合。所以这种方法是必要的。
答案 1 :(得分:2)
在您的视图中,您获取了Post
个对象的列表,因此您应该通过模板中的帖子列表进行操作
{% for post in posts %}
< your stuff here >
{% endfor %}
如果您不想通过Post
对象列表进行迭代,则应在视图中获得一个Post
对象:
post = get_object_or_404(
Post,
slug=post,
status='published',
publish__year=year,
publish__month=month,
publish__day=day)
或在您的模板中按索引获取对象:
<p>Published {{ post.0.publish }} by {{ post.0.author }}</p>
其中0
是记录的索引
答案 2 :(得分:0)
您是否在代码中编写了循环
无论数据库中有多少条目
,都应该使用for循环来检索数据{% for post in posts %}
< your stuff here >
{% endfor %}