1. 問題
最近在使用 flask 開發一個論壇時遇到了下面問題:
我的站點首頁有很多的文章,文章裏面會出現圖片(實際是上傳到服務器的圖片 html 鏈接),我需要在站點首頁裏將文章中的圖片簡略表示成 [圖片] 兩個字呢,就像知乎手機客戶端那種。
就像下圖第二樓中的簡略表示,但那個是我爲了描述方便,手打的。
另外補充兩點:
- 我的博客文章是保存在數據庫中的 html 文本
- 首頁的文章顯示是通過 jinja2 模板引擎渲染出來的
2. 思路
google 查了半天沒有解決辦法,但找到了一點思路,就是自定義 jinja2 過濾器,使用過濾器將 圖片 html 標籤<img />
全部替換成文字 [圖片]
就行了。
3. 解決
花了半個小時查了下 python 中正則表達式的使用方法,最終解決了問題。
自定義過濾器需要做兩項工作:一是寫一個filter函數;然後在當前環境中註冊filter。
編寫如下過濾器函數 subImg
def subImg(name):
re_img = re.compile('<img.*?/>')
return re.sub(re_img, u'[圖片]', name)
然後在環境中註冊該filter,代碼如下:
env=app.jinja_env
env.filters['subImg'] = subImg
需要注意的是,由於我使用的藍圖,並且使用 manage 管理 app 對象,所以需要在 manage.py 文件中加入上述的代碼即可。
下圖時實現結果: