python博客模板_Python3.8+Django3.0搭建个人博客(3)编写视图和模板

编写视图代码,从模板中取出数据,并把数据传给模板。

article/views.py

from django.shortcuts import render

from .models import ArticlePost

def article_list(request):

# 从ArticlePost取出所有文章

articles = ArticlePost.objects.all()

# 前面的'articles'只是一个命名,在模板中通过这个命名获取传过去的数据,你也可以改成别的

# 后面的articles是上一行代码中获得的所有文章

context = { 'articles': articles }

# 第一个参数是固定的request。第二个参数是指定要把数据传输到哪个模板,

# 即article文件夹下面的list.html。第三个参数是要传输的数据。

return render(request, 'article/list.html', context)

下面编写模板文件。在根目录my_blog文件夹下新建文件夹templates,这个文件夹用来存放所有的模板文件。templates文件夹中新建文件夹article,这个文件夹用来存放article应用的模板文件。article文件夹中新建list.html文件。在list.html中输入下面的代码。

templates/article/list.html

{% for article in articles %}

{ { article.title }}

{% endfor %}

模板中的逻辑代码要用{% %}括起来,属性值用{ { }}括起来。第一行代码表示这是一个for循环,从articles中把所有数据挨个取出来,并命名为article,articles是刚才在views.py中定义的名称。第二行代码把article中的title属性展示出来,其中article是上一行代码中命名的。第三行代码表示循环结束。

虽然我们已经把模板文件写好了,但是Django还不知道模板文件的位置,需要我们在settings.py中注册。找到TEMPLATES中的DIRS这一行,改成下面的样子。

my_blog/settings.py

TEMPLATES = [

{

...

'DIRS': [os.path.join(BASE_DIR, 'templates')],

...

},

]

其中BASE_DIR表示项目的根目录,'templates'表示模板文件在根目录中的templates文件夹中。

我们再来看views.py中的return render(request, 'article/list.html', context)这句代码。list.html的实际位置是my_blog/templates/article/list.html,因为配置文件已经把模板文件的位置指定到了templates这里,我们只需要接着写更详细的位置就可以了,即article/list.html,Django会把这些路径拼接起来。

模型,视图,模板,都已经写好了,但是我们还没有指定访问路径。之前我们在my_blog中的urls.py中指定了article应用的路径,下面我们在打开在上一篇文章中新建的article的路由文件urls.py,并在urlpatterns中添加下面的代码。

article/urls.py

from . import views

...

urlpatterns = [

path('article_list/', views.article_list, name='article_list'),

]

'article_list/'指定该文件在article应用内的访问路径,和my_blog/urls.py中的路径拼接起来,路径是这样的:my_blog/article/article_list/。views.article_list指定了访问视图中的article_list函数。name是为这个路径定义一个名称,方便后面我们使用。

我们来梳理一下my_blog中的urls.py和article中的urls.py的关系。my_blog相当于是一个学校,它的urls.py是学校的班级清单,'article/'指向某个班级,比如三年级一班,include表示如果你想找到这个班级里的某一个学生,那么你应该去看这个班级的学生清单,即'article.urls',namespace相当于这个班级的外号,比如尖子班。

article的urls.py相当于这个班级的学生的清单,article_list/指向某一个学生,name相当于这个学生的外号。my_blog/article/article_list/就相当于皮皮小学/三年级一班/皮皮虾同学。

此时数据库中还没有文章,我们要在Django后台中创建几篇。

创建管理员账号。

(env) C:\Users\glp\blog\env\my_blog>python manage.py createsuperuser

Username: username

Email address: [email protected]

Password:

Password (again):

Superuser created successfully.

把模型里的ArticlePost注册到后台,后台才会显示ArticlePost。打开article文件夹中的admin.py文件并输入下面的代码。

article/admin.py

from django.contrib import admin

from .models import ArticlePost

admin.site.register(ArticlePost)

然后我们在cmd中启动开发服务器。

(env) C:\Users\glp\blog\env\my_blog>python manage.py runserver

打开浏览器并输入http://127.0.0.1:8000/admin,进入后台管理员登录界面,输入刚才创建的管理员账号,登录后点击Article posts进入文章列表,点击右上角的“ADD ARTICLE POST +”按钮,选择作者(目前只有一个管理员用户,所以只能选择管理员),输入title和body,创建时间不用输入,会自动生成,最后点右下角的“SAVE”按钮。这时我们就能从后台看到一篇文章了,显示的是文章的title,这是我们在models.py中的__str__方法里定义的,返回的是文章的title属性。

为了看到文章列表的效果,你可以再创建几篇文章。

另外打开一个浏览器,输入http://127.0.0.1:8000/article/article_list就可以看到我们创建的几篇文章了。http://127.0.0.1:8000/是服务器的访问地址,article/article_list是我们在两个urls.py中定义的。

虽然文章全部显示出来了,但是界面好丑,我们将在下一篇教程中引入bootstrap美化模板:Python3.8+Django3.0搭建个人博客(4)引入bootstrap

你可能感兴趣的:(python博客模板)