您好,欢迎来到本期“利用Python Django一步步搭建个人博客”系列的第四部分。在上一篇教程中,我们学习了如何编写URL并将其映射到页面。在我们继续之前,我们需要做的一件事是让我们写的URL具有动态性。我们想要这样做的原因是,确保我们的文件夹或文件位置发生变化,我们的程序不会失效。首先,转到我们创建的blogapp文件夹,然后创建一个名为“urls.py”的新文件。在该文件内,输入以下代码:
转到blog文件夹中的urls.py文件,并按如下所示进行更新:
在blog文件夹的urls.py文件中,我们在第17行从django.conf.urls导入一个名为“include”的模块。然后我们在第22行向它传递一个字符串。这个字符串是我们的blogapp将容纳的所有URL的地址。只要用户发出请求,Django就会搜索该文件的URL。请注意,同一行中的RegEx没有“$”符号。
在blogapp文件夹下的urls.py文件中,我们从views.py文件中导入posts_home函数(第4行)。接下来,我们在url函数中将该函数与RegEx一起调用。还记得blog下的urls.py中我们的RegEx丢失的“$”吗?它现在在这里。这意味着字符串在URL“/ posts /”处停止,就像我们之前做的那样!
现在我们明白了,运行服务器并转到localhost:8000 / posts。我们的页面仍然可以随心所欲地呈现。
在博客中,我们希望能够创建、更新、删除和显示我们拥有的帖子列表。但首先,我们将从显示帖子列表的页面开始,从那里开始构建。对于像我们的博客这样的大型程序,Django有一种更好的方式来呈现称为模板的页面。要开始使用模板,首先,在与blogapp文件夹相同的根目录中创建一个文件夹。
接下来,进入settings.py文件并将其修改为如下所示:
我们在那里做的是告诉Django去哪里寻找我们的模板文件。 目前,我们还没有任何创建。转到模板文件夹,然后创建一个名为index.html的文件。在其中,添加以下代码:
接下来,进入您的views.py文件并将其修改为如下所示:
从views.py文件开始:我们创建了一个名为“context”的字典,其中包含键值对。接下来,我们调用render方法。 render方法有三个参数,即请求、要呈现的页面和字典。在index.html文件中,我们看到一个奇怪的{}。这是一个传递给我们的HTML文件的变量。这个变量是我们在页面中创建的字典的“键值”对中的“值”。
如果我们转到localhost:8000/ posts /,我们会看到我们的页面正常运行。但它如何知道要呈现什么?views.py文件有一个我们创建的名为“posts_home”的方法。此方法接受请求并返回带有上下文的HTML页面。在我们的urls.py文件中,调用此方法,因此当我们在浏览器中向此URL发出请求时,我们会看到正在返回(呈现)的页面。
就是在Django中使用模板渲染页面。它看起来并不多,但是当我们向数据库添加数据时,我们可以在此页面上显示它。我们可以在Django中使用一个名为Queryset的东西来做到这一点。在开发环境中,键入以下命令:
python manage.py shell
这应该打开一个交互式shell,你可以编写python代码。我们想用数据填充数据库,所以写下面的代码:
>>> from blogapp.models importPost
这行代码的作用是导入我们的Post数据库,现在我们可以创建数据,删除数据以及我们想要的任何对数据库的操作。要向其添加数据,请运行以下命令:
这行代码的作用是创建一个标题为“My First data”和附带内容的帖子。请使用该命令创建14个帖子(随意更改标题和内容。此外,您可以创建多于或少于14个帖子)。现在,我们的数据库中已经拥有了一部分数据,我们可以查询数据库中的信息。在shell中运行以下命令:
>>> for obj in queryset:
. . . print obj.article_title
. . . print obj.content
现在我们在数据库中有了数据,我们希望看到它在HTML页面上呈现。为此,我们必须对views.py文件进行一些修改。添加以下代码:
打开index.html文件并对其进行以下修改:
在index.html文件中,我们执行循环查看来自视图的数据。我们使用“For循环”来获取我们需要在页面上呈现的数据资源。
运行服务器,然后转到localhost:8000 / posts,可以看到我们的所有博客信息。
你到目前为止学到了什么:
1. URL如何工作
2.如何创建模板并在Django中呈现它
3.如何访问数据库并向其中添加数据
4.渲染要查看的数据。
我们该系列的教程到此就结束了,您现在已经能独自搭建自己简单的博客,如果您想学习Django或者python的更多操作,可以继续探索交流。
END
本公众号原创作品,未经授权禁止转载,特此声明,谢谢合作!
领取专属 10元无门槛券
私享最新 技术干货