没有从数据库

时间:2017-03-14 05:42:34

标签: python django django-models django-templates django-views

我正在使用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>]

“这是我”是保存在数据库中的帖子的标题

提前感谢您的时间和精力。如果您告诉我问题是什么,那将会很有帮助。

3 个答案:

答案 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 %}