模板中的动态数据

未匹配的标注
本文档最新版为 1.8,旧版本可能放弃维护,推荐阅读最新版!

我们已经有了几个不同的片段: Post 模型定义在 models.py 中,另外有 post_list views.py 和加入的模板。 但实际上我们如何使我们的帖子出现在我们的 HTML 模板上呢? 那是我们想要做的: 获取一些内容 (保存在数据库中的模型) 然后在我们的模板中很漂亮的展示,对吗?

这就是 views 应该做的: 连接模型和模板。 在我们的 post_list 视图 中我们需要获取我们想要显示的模型,并将它们传递到模板中去。 所以在 视图 中,我们决定什么(模型)将显示在模板中。

好吧,我们将如何实现它呢?

我们需要在代码编辑器中打开我们的 blog/views.py。到目前为止 post_list view 看起来像这样:

from django.shortcuts import render

def post_list(request):
    return render(request, 'blog/post_list.html', {})

还记得我们说过导入在不同文件中编写的代码吗? 现在是我们必须导入我们已经写在 models.py 里的模型的时候了。 我们将添加这行 from .models import Post,像这样:

from django.shortcuts import render
from .models import Post

models 前面的点号表示 当前目录 或 当前的应用程序views.py 和 models.py 是在同一目录中,我们只需要使用 . 和文件名(无 .py) 。 然后我们导入模型的名称(Post).

但接下来是什么呢?为了让实际的博客帖子从 Post 模型里获取,我们需要一种叫做 QuerySet 的东西.

QuerySet

您应该已经熟悉 Queryset 是如何工作的。我们在 Django ORM (QuerySets) 章节谈论过它.

所以现在我们想根据 published_date 对已发布的博客排序,对吗?我们已经在 QuerySets 查询集一节里这么干过!

Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')

现在我们在代码编辑器打开blog/views.py ,将代码添加到函数 def post_list(request) 里去——但是不要忘记先添加 from django.utils import timezone

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

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

最后还没有完成的部分是传递 posts 查询集到模板上下文中。不要担心,我们将在下一章中介绍如何显示它)。

请注意我们为这里的 QuerySet 查询集创建了一个 变量posts。将此视为我们的 QuerySet 的名字。从现在开始我们可以通过这个名字引用它。

render 函数中我们已经有了request参数(因此我们通过互联网从用户接收的一切) 和模板文件 'blog/post_list.html' 参数。 最后一个参数,看起来像这样: {}  ,我们可以在其中添加一些模板要使用的东西。 我们需要给它们起名字 (我们现在依然沿用 'posts'):blush:。 它应该看起来像这样: {'posts': posts}。 请注意,: 之前的部分是字符串;你需要将它用引号包围 `''.

所以最后我们的 blog/views.py 文件应如下所示:

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

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

就是它 !现在回到我们的模板并显示此 QuerySet 查询集!

想了解更多关于 Django 的 QuerySert 的内容吗?那么你可以查看:
 docs.djangoproject.com/en/2.2/ref/...

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/django-girls/2....

译文地址:https://learnku.com/docs/django-girls/2....

上一篇 下一篇
Summer
贡献者:3
讨论数量: 0
发起讨论 查看所有版本


暂无话题~