Masonite 熟悉步驟小記錄 (六、文章展示)

Galois發表於2020-06-07

建立兩個模版

(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 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章