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/1localhost:8000/post/2 之类的页面效果。

本作品采用《CC 协议》,转载必须注明作者和本文链接
不要试图用百米冲刺的方法完成马拉松比赛。
本帖由 Galois 于 3年前 加精
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!