建立兩個模版
(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 協議》,轉載必須註明作者和本文連結