報錯資訊如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1keRpmTyUFROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLxQDO1UjM0cTM5EzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
出現這個問題應該是自定義模闆的标簽和過濾器時出錯的。
下面來說一下簡要的需要注意的幾點,可以根據自己的代碼進行修改:
- 自定義的 tags 和 filters 會儲存在子產品名為
的目錄内。templatetags
- 子產品檔案的名字即稍候你用來加載 tags 的名字,是以小心不要采用一個可能與其它應用自定義的 tags 和 filters 沖突的名字。
- 要成為一個可用的 tag 庫,子產品必須包含一個名為
的子產品級變量,它是一個register
執行個體。template.Library
- 所有的 tags 和 filters 均在其中注冊。是以,在子產品的開始,輸入以下内容:
-
from django import template register = template.Library()
- {% load 标簽檔案名 %}來使用标簽
例:
mytag.py内容如下:
import datetime
from django import template
#建立一個模闆對象
register = template.Library()
@register.filter(name='sub1')#這個name是在模闆中調用時用到的
def sub(value): #這參數不能多于兩個
return value - 1
@register.filter(name='days_ago')
def time_ago(value):
'''
定義一個距離目前時間多久前的過濾器
:param value:
:return:
1、如果時間間隔一分鐘前,顯示剛剛
2、如果時間間隔大于1分鐘小于1小時,顯示xx分鐘前
3、如果時間間隔大于1小時小于24小時,顯示xx小時前
4、如果時間間隔大于24小時小于30天,顯示xx天前
5、如果時間間隔大于30天,顯示具體時間
'''
if not isinstance(value, datetime.datetime):
return value
now = datetime.datetime.now()
timestamp = (now - value).total_seconds()
if timestamp < 60:
return '剛剛'
elif timestamp >= 60 and timestamp < 60 * 60:
return '{}分鐘前'.format(int(timestamp / 60))
elif timestamp >= 60*60 and timestamp < 60*60*24:
return '{}小時前'.format(timestamp/60/60)
elif timestamp >= 60*60*24 and timestamp < 60*60*23*30:
return '{}天前'.format(int(timestamp/60/60/24))
else:
return value.strftime('%Y-%m-%d %H:%M')
更多可以檢視django官方文檔:https://docs.djangoproject.com/zh-hans/2.2/howto/custom-template-tags/