簡體   English   中英

基於類的視圖中的get_queryset方法的按視圖緩存(Django應用)

[英]Per-view caching for get_queryset method in a class-based view (Django app)

TL; DR:

我似乎無法將每個視圖的緩存應用於基於類的視圖的get_queryset方法。 有什么其他方法可以將緩存應用於基於類的視圖的方法嗎? 或者,根本沒有辦法嗎?

當前,我得到的錯誤是: “視圖”對象沒有屬性“方法”。 如果在視圖頂部編寫相同的裝飾器, 則會得到: 'function'對象沒有屬性'as_view' (下面的回溯)。


細節:

這是視圖:

#@cache_page(20)
class OnlineView(ListView):
    template_name = "online.html"
    paginate_by = 75

    #@cache_page(20)   
    def get_queryset(self):
        users = Session.objects.filter(last_activity__gte=(timezone.now()-timedelta(minutes=5))).only('user').distinct('user')
        return users

這是我在視圖頂部編寫緩存標記時得到的追溯:

Traceback (most recent call last):
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 92, in inner_run
    self.validate(display_num_errors=True)
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/management/base.py", line 280, in validate
    num_errors = get_validation_errors(s, app)
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/management/validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/db/models/loading.py", line 166, in get_app_errors
    self._populate()
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/db/models/loading.py", line 75, in _populate
    self.load_app(app_name)
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/db/models/loading.py", line 96, in load_app
    models = import_module('.models', app_name)
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/debug_toolbar/models.py", line 63, in <module>
    patch_root_urlconf()
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/debug_toolbar/models.py", line 51, in patch_root_urlconf
    reverse('djdt:render_panel')
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 467, in reverse
    app_list = resolver.app_dict[ns]
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 311, in app_dict
    self._populate()
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 263, in _populate
    for pattern in reversed(self.url_patterns):
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 347, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/core/urlresolvers.py", line 342, in urlconf_module
    self._urlconf_module = import_module(self.urlconf_name)
  File "/home/hassan/.virtualenvs/redditpk/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/hassan/Desktop/unconnectedredditpk/unconnectedreddit/urls.py", line 26, in <module>
    url(r'^online/$', auth(OnlineView.as_view()), name='online'),
AttributeError: 'function' object has no attribute 'as_view'

最后,這是我在urls.py中擁有的相關內容:

url(r'^online/$', auth(OnlineView.as_view()), name='online'),

通過在URL配置中添加緩存,您可以更輕松地實現此目的:

from django.views.decorators.cache import cache_page

url(r'^online/$', cache_page(20)(auth(OnlineView.as_view())), name='online'),

但是我注意到您在同一視圖上有一個auth()裝飾器。 我不確定您是否要緩存需要身份驗證的視圖...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM