簡體   English   中英

Django動態菜單上下文處理器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM