1

J'utilise Django pour créer un site qui fournit une interface Web distincte pour les producteurs et consommateurs. Les deux interfaces utilisateur (ou "sous-sites") ont différentes dispositions, menus et graphiques. Cependant, ils accèdent à la même base de données et aux mêmes modèles, mais seulement sous différents aspects (producteur et consommateur ...). Tous sont hébergés sous un même domaine, la différenciation de l'interface utilisateur se fait avec des URL.Sous-sites de CMS avec Django

Le problème vient quand je veux intégrer un CMS à ce système, pour prendre soin des structures de menu et du contenu textuel. Comment dois-je procéder pour gérer les deux menus différents pour les différentes interfaces utilisateur? J'ai jeté un oeil à django-cms et à django-page-cms, et ils semblent ne conserver qu'une seule hiérarchie de menus.

Des idées?

Une solution sale serait d'ajouter par ex. un préfixe différent pour les éléments de menu de chaque interface utilisateur dans le CMS, et pirater le code CMS afin qu'il insère uniquement les éléments de menu pour l'interface utilisateur correcte (donnée en tant que paramètre à la balise de modèle show_menu).

Une meilleure façon de procéder serait d'avoir plusieurs instances de l'application CMS, de sorte que chacune d'elles ait ses propres tables de base de données. Mais est-ce possible avec django et par exemple. django-cms ou django-page-cms?

Quelques autres restrictions:

  • le CMS doit prendre en charge la localisation
  • Je préfère courir une seule instance de Django, de garder la configuration et de test simples

Répondre

0

Je ne l'ai pas utilisé django -cms donc c'est juste au dessus de ma tête.

Il y avait une section des documents appelés Extending the menu qui semblait prometteuse. Il peut être regrettable que la plupart de leur configuration se trouve dans settings.py car il semble que vous puissiez manipuler leur CMS_TEMPLATES pour utiliser différents modèles de base (etc.) pour différents utilisateurs. Une façon de contourner ce problème (en supposant qu'il n'y a pas de route plus directe) est d'ajouter quelque chose au UserProfile qui identifie un utilisateur en tant que consommateur/producteur. Ensuite, dans votre base.html vous:

{% if user.get_profile.consumer %} 
... 
{% else %} 
... 
{% endif %} 

Cela vous donne effectivement deux tout autre aspect/impression des options en fonction du type d'utilisateur. Je noterai également que {% extends %} peut prendre une constante de chaîne ou une variable de chaîne, ainsi vous pouvez utiliser un context_processor pour définir le nom du modèle que vous étendez.

0

Ce dont vous avez besoin est show_menu_below_id tag de django-cms. Créez les pages consommateurs et producteurs avec leur identifiant respectif (fieldset avancé, en bas du formulaire de page) et commencez ensuite à construire la hiérarchie des pages pour chacun d'entre eux.

ensuite dans les modèles utilise les tags:

<ul> 
    {% if user.get_profile.consumer %} 
    {% show_menu_below_id "consumer" %} 
    {% else %} 
    {% show_menu_below_id "provider" %} 
    {% endif %} 
</ul> 
Questions connexes