我有一个名为 show_board
的 View 。在其中,我在每次运行时将字段 Board.views
递增 1,以计算页面浏览量。
问题是,当我在该 View 上使用@cache_page 装饰器时,Board.views
只会在每次生成新的缓存 View 时递增,而不是每次生成该 View 时请求,就像我想的那样。
我怎样才能做到这一点?
最佳答案
您实际上可以编写另一个装饰器来实现这一点。
def view_incrementer(view_func):
"""A decorator which increments board views"""
def _wrapped(*args, **kwargs):
# here you can increment Board.views
# kwargs will contain URL parameters
pk = kwargs.get('pk')
Board.objects.filter(pk=pk).update(views=F('views')+1)
return view_func(*args, **kwargs)
return _wrapped
然后将装饰器应用到您的 View 函数/方法:
@view_incrememter
@cache_page(timeout=60)
def show_board(request, pk):
...
或者你可以直接在你的urls.py中使用它
url(r'^some-path/(?P<pk>\d+)/$', view_incrementer(cache_page(60)(show_board))),
关于python - 使用缓存时计数为 "page views"或 "hits",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35208763/