我正在开发电子商务的动态菜单,我即将使用context_processor。我希望菜单显示在所有模板中,此菜单可以从管理员更改(添加/删除选项)。
问题是,在context_processor中创建菜单时,每次加载任何页面时我都会访问数据库吗?它对于菜单来说听起来不是最理想的。还有其他方法可以考虑吗?通过编写自定义模板标记,我将遇到同样的问题。
答案 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