0

我有一个“工作”模型,它具有三个主要类别绘图、运动、网络。我正在尝试在自定义上下文处理器中进行缓存:

#custom context processor
works = cache.get(cache_key_works)
if not works:
    workList = Work.objects.filter(publish=1).order_by('-publish_from')
    works = {'drawings': [], 'webdesigns': []}
    for w in workList:
        s = w.category.get_root().slug_en
        if s == 'drawing':
            works['drawings'].append(w)
        elif s == 'web-design':
            works['webdesigns'].append(w)
return {'WORKS': works}

比我根据类别在模板中使用 WORKS...

这是一个好的还是不必要的做法?

4

1 回答 1

1

它有效并且不是不必要的练习,拥有良好的缓存是关键,但是我有点困惑为什么你要Work像你一样循环遍历 QuerySet。

这不适合你吗:

#custom context processor
works = cache.get(cache_key_works)
if not works:
    drawings = Work.objects.filter(publish=1, category__root__slug='drawing').order_by('-publish_from')
    web_designs = Work.objects.filter(publish=1, category__root__slug='web_designs').order_by('-publish_from')
    worktypes = {'drawings': drawings, 'web_designs': web_designs}

return {'work_types': work_types}

注意:这category__root__slug='drawing'只是概念上的,因为您需要用正确的模型结构替换它。此外,work_types如果您遇到缓存未命中,您永远不会将其放入缓存中,这也是您应该查看的内容。

于 2013-08-19T09:25:49.890 回答