Potentiellement oui, vous utiliserez cette base de données pour chaque accès à la page. Je suggère d'utiliser la mise en cache. Django fournit certaines fonctions pour la mise en cache que vous pouvez utiliser (docs here).
Vous pouvez le faire dans le modèle et au lieu d'un processeur de contexte créer un template tag.
{% load cache %}
{% load menu %}
{% cache 500 menu "unique-options" %}
{% generate_menu %}
{% endcache %}
Là où j'ai mis « -options uniques » vous devez inclure une chaîne qui est spécifique à la version du menu que vous utilisez. Donc, si vous en avez un qui est pour les utilisateurs qui sont le personnel et pour ceux qui ne sont pas, vous pouvez utiliser request.user.is_staff
pour différencier les types de menu, sinon le cache peut servir le mauvais menu aux gens.
Vous pouvez également le faire dans le cadre de la fonction elle-même, cela fonctionnerait si vous utilisez un processeur de contexte ou un tag de modèle.
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
Si votre menu est stocké dans la base de données, alors bien sûr vous accéderez à la base de données chaque fois que vous l'interrogerez. Pourquoi pensez-vous que c'est un problème? –