Masonite 熟悉步骤小记录 (六、文章展示)
创建两个模版
(env) $ craft view posts
(env) $ craft view single
创建控制器
(env) $ craft controller Post
为 posts 创建一个控制器,用于 BlogController 控制器分开。
在这个新的控制器 masapp/app/http/controllers/PostController.py
中添加展示文章列表功能:
from app.Post import Post
...
def show(self, view: View):
posts = Post.all()
return view.render('posts', {'posts': posts})
添加路由
实现了控制器方法后,需要添加到路由中:
Get('/posts', 'PostController@show'),
文章页面视图
路由和控制器方法都就位了,当然要有个视图了:masapp/resources/templates/posts.html
:
{% for post in posts %}
{{ post.title }}
<br>
{{ post.body }}
<hr>
{% endfor %}
现在可以 craft serve -r
后查看 localhost:8000/posts 页面会看到文章列表。
之前建立了作者关系。Oator 将采用这种关系并从中建立属性,因此也可以显示作者的姓名:
{% for post in posts %}
{{ post.title }} by {{ post.author.name }}
<br>
{{ post.body }}
<hr>
{% endfor %}
如果文章比较少,可以去 localhost:8000/blog 多创建一些。
再来实现一个单个文章的页面masapp/routes/web.py
:
Get('/post/@id', 'PostController@single')
masapp/app/http/controllers/PostController.py
:
from app.Post import Post
from masonite.request import Request
from masonite.view import View
...
def single(self, view: View, request: Request):
post = Post.find(request.param('id'))
return view.render('single', {'post': post})
这里使用了 param()
方法从 URL 中获取了 id,当指定 @id
时,这个 key 是在路由中设置的。
真正的应用开发中,会使用 @slug
,然后用 request().param('slug')
获取。
单个文章页面模版 masapp/resources/templates/single.html
:
{{ post.title }}
<br>
{{ post.body }}
<hr>
现在可以看看 localhost:8000/post/1 、localhost:8000/post/2 之类的页面效果。
本作品采用《CC 协议》,转载必须注明作者和本文链接