文章展示页 
1. 表结构 
首先需要设计文章在数据库中的表结构,表名为 article,设计如下:
| 字段 | 类型 | 描述 | 
|---|---|---|
| title | string | 文章标题 | 
| content | string | 文章内容,markdown 格式 | 
| tags | list | 文章标签 | 
| id_ | string | 文章 ID,由随机的4位数字组成 | 
| views | int | 文章被浏览次数 | 
| create_at | datetime | 创建时间 | 
| update_at | datetime | 更新时间 | 
- 因为此网站用的是 mongo 数据库,类型我就用 python 的类型来标注了;你用其它数据库也是类似的
 - 可以按照你的想法增添字段,比如还可以添加点赞数量等
 - 表设计完之后,手动插入一条数据,为我们展示文章提供测试数据。
 
2. 文章 HTML 模板 
接着设计文章如何展示,即文章展示的 HTML 模板
 参照 apps/templates/index.html,新建 apps/templates/article.html 文件:
jinja
{% extends 'base.html' %}
{% block nav %}
  {% include 'nav.html' %}
{% endblock %}
{% block content %}
  <div class="container">
    <h2>{{ title }}</h2>
    <hr class="my-3">
    {{ content }}
  </div>
{% endblock %}{{ content }}就是要展示的文章内容
3. 路由与视图 
接着设计视图函数将文章数据从数据库中取出来
编辑 server.py 文件,添加文章路由和视图函数:
python
import markdown
from sanic import Sanic
from sanic import response
from jinja2 import Environment, PackageLoader
from pymongo import MongoClient
app = Sanic('MyAPP')
jinja2 = Environment(loader=PackageLoader('apps', 'templates'))
# mongo 配置
MONGO = {
    'host': '127.0.0.1',
    'port': 27017,
    'username': 'root',
    'password': '123456',
    'authSource': 'admin',
}
client = MongoClient(**MONGO)
def md2html(content_md):
    """markdown 转为 html"""
    content_html = markdown.markdown(
        content_md, extensions=[
            'extra',  # 支持表格等其它
            'codehilite'  # 代码高亮
        ],
    )
    return content_html
@app.get('/')
async def hello_world(request):
    template = jinja2.get_template('index.html')
    context = {
        'msg': 'Hello, world.'
    }
    html = template.render(**context)
    return response.html(html)
@app.get('/<type_>/<id_>/')
async def article_detail(request, type_, id_):
    template = jinja2.get_template('article.html')
    res = client[type_]['article'].find_one({'id_': id_})
    res['content'] = md2html(res['content'])
    del res['_id']
    html = template.render(**res)
    return response.html(html)
if __name__ == '__main__':
    app.run(debug=True, auto_reload=True)视图函数逻辑也很简单,就是从数据库中取出数据,取出来之后需要将 markdown 格式转为 html 格式;添加了 md2html 函数;还有 mongo 连接的代码
需要安装额外的包:
python
pip install pymongo markdown访问:比如你的文章类型是 python(对应存储到 mongo 的 python 库中),ID 是 0001,那么访问地址为: http://127.0.0.1:8000/python/0001/
