Django动态菜单上下文处理器

时间:2016-02-24 15:27:44

标签: django django-templates

我正在开发电子商务的动态菜单,我即将使用context_processor。我希望菜单显示在所有模板中,此菜单可以从管理员更改(添加/删除选项)。

问题是,在context_processor中创建菜单时,每次加载任何页面时我都会访问数据库吗?它对于菜单来说听起来不是最理想的。还有其他方法可以考虑吗?通过编写自定义模板标记,我将遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

可能是的,您将访问每个页面访问的数据库。我建议使用缓存。 Django提供了一些用于缓存的函数,您可以使用它们(docs here)。

您可以在模板中执行此操作,而不是上下文处理器创建template tag

request.user.is_staff

我放置的地方" unique-options"您将包含一个特定于您正在使用的菜单版本的字符串。因此,如果您有一个适用于工作人员的用户,那么您可以使用from django.core.cache import cache def generate_menu(): menu_cache_key = "menu" + differentiating_string menu = cache.get(menu_cache_key) if menu: return menu ...steps to generate menu here... cache.set(menu_cache_key, menu, 500) return menu 来区分菜单类型,否则缓存可能会向人们提供错误的菜单。

或者你可以将它作为函数本身的一部分来实现,如果您使用上下文处理器或模板标记,这将有效。

java -jar selenium-server-standalone-2.52.0.jar -role hub