[英]Django dynamic menu context processor
我正在為電子商務創建動態菜單,並且將要使用context_processor。 我希望菜單顯示在所有模板中,並且該菜單可以從admin更改(添加/刪除選項)。
問題是,在context_processor中創建菜單時,每次加載任何頁面時都將訪問數據庫嗎? 對於菜單來說聽起來不是很理想。 還有其他方法可以考慮嗎? 通過編寫自定義模板標簽,我將遇到同樣的問題。
可能是的,您將為每個頁面訪問訪問該數據庫。 我建議使用緩存。 Django提供了一些可以進行緩存的功能,您可以利用( docs在這里 )。
您可以在模板中執行此操作,而不必使用上下文處理器來創建模板標簽 。
{% load cache %}
{% load menu %}
{% cache 500 menu "unique-options" %}
{% generate_menu %}
{% endcache %}
在放置“ unique-options”的位置,您將包括一個特定於所使用菜單版本的字符串。 因此,如果您有一個既適合員工又適合那些非員工用戶,則可以使用request.user.is_staff
區分菜單類型,否則緩存可能會為人們提供錯誤的菜單。
另外,您也可以將其作為函數本身的一部分來執行,如果您使用上下文處理器或模板標簽,則可以使用此方法。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.