【发布时间】:2022-01-25 14:55:58
【问题描述】:
我正在关注 Django 文档的 this part,试图将缓存添加到生成的站点地图。文档提供以下示例代码:
from django.contrib.sitemaps import views as sitemaps_views
from django.views.decorators.cache import cache_page
urlpatterns = [
path('sitemap.xml',
cache_page(86400)(sitemaps_views.index),
{'sitemaps': sitemaps, 'sitemap_url_name': 'sitemaps'}),
path('sitemap-<section>.xml',
cache_page(86400)(sitemaps_views.sitemap),
{'sitemaps': sitemaps}, name='sitemaps'),
]
它按预期工作,缓存结果是我的默认缓存(redis)。
但由于我有非常大的站点地图,我会将缓存存储在文件缓存中,而不是内存中。我的 django settings.py 确实包含必需的设置:
CACHES = {
# Redis cache
"default": { ... },
# File cache
"file": { ... },
}
但是,当我尝试为 cache_page 装饰器指定正确的参数时:
urlpatterns = [
path('sitemap.xml',
cache_page(86400)(sitemaps_views.index)(cache="file"), # <--- !!!
{'sitemaps': sitemaps, 'sitemap_url_name': 'sitemaps'}),
]
我收到一个错误:
TypeError: _wrapped_view() missing 1 required positional argument: 'request'
在这种情况下,提供缓存后端的正确方法是什么?
【问题讨论】:
-
我在文档中没有看到
(cache="file")你为什么要添加它? -
@Ahtisham 请参阅docs.djangoproject.com/en/4.0/topics/cache/#the-per-view-cache,其中包括以下示例:
@cache_page(60 * 15, cache="special_cache")