如何解决在Django中缓存查询结果
将缓存的查询弹出到Django的缓存中:
from django.core.cache import cache
cache.set('key', queryset)
# myproject/myapp/context_processors.py
from django.core.cache import cache
def cached_queries():
return {'cache', cache.get('key')}
TEMPLATE_CONTEXT_PROCESSORS += (
'myproject.myapp.context_processors.cached_queries'
)
现在,你将能够访问cache
所有通用模板以及具有请求上下文的所有模板中的变量,如果在视图中完成此操作,则会获得一个模板:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
何时设置缓存 这取决于缓存中包含的内容。但是,一个普遍的问题是,只有在发送页面请求时,Django才真正真正执行Python,而这通常不是你想要进行此类工作的地方。
一种替代方法是为特定应用程序创建自定义管理命令。然后,你可以在必要时手动运行此程序,或更常见的情况是将其设置为cron作业。
要创建你必须创建后裔居住类的管理命令Command
一个内management/commands
位于应用程序的目录里面:
# myproject/myapp/management/commands/update_cache.py
from django.core.management.base import NoArgsCommand
from django.core.cache import cache
class Command(NoArgsCommand):
help = 'Refreshes my cache'
def handle_noargs(self, **options):
cache.set('key', queryset)
该文件的名称很重要,因为这将是命令的名称。在这种情况下,你现在可以在命令行上调用它:
python manage.py update_cache
解决方法
我正在尝试找到一种方法来缓存不会随频率变化的查询结果。例如,来自电子商务的产品类别(手机,电视等)。我正在考虑使用模板片段缓存,但是在这个片段中,我将遍历这些类别的列表。该列表在网站的任何部分都可用,因此在我的base.html
文件中。渲染模板时是否总是要发送类别列表?还是有更动态的方法来执行此操作,以使列表始终在模板中可用?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。