我正在使用Django创建一个网站,为各种制作者和消费者提供单独的网络用户界面。两个UI(或“子网站”)具有不同的布局,菜单和图形。然而,他们只是从不同的方面(生产者与消费者......)访问相同的数据库和模型。它们都在一个域下托管,UI区分由URL完成。
当我想将CMS集成到此系统时,问题出现了,以便处理菜单结构和文本内容。我该如何处理不同UI的两个不同菜单?我看了一下django-cms和django-page-cms,它们似乎只保留了一个菜单层次结构。
有什么想法吗?
一个肮脏的解决方案是添加例如CMS中每个UI菜单项的不同前缀,并破解CMS代码,以便它只插入正确UI的菜单项(作为show_menu模板标记的参数)。
如果有可能拥有CMS应用程序的多个实例,那么更好的方法是,每个实例都有自己的数据库表。但这是否可能与django和例如django-cms或django-page-cms?
一些进一步的限制:
答案 0 :(得分:0)
我没有使用过django-cms,所以这只是我的头脑。
有一部分名为Extending the menu
的文档看起来很有前途。可能不幸的是,他们的大部分配置都在settings.py
中,因为看起来您可以操纵他们的CMS_TEMPLATES为不同的用户使用不同的基本模板(等)。解决这个问题的一种方法(假设没有更直接的路由)是向UserProfile添加一些东西,将用户标识为消费者/生产者。然后在base.html
中执行:
{% if user.get_profile.consumer %}
...
{% else %}
...
{% endif %}
根据用户类型,这有效地为您提供了两种完全不同的外观/感觉选项。我还要注意{% extends %}
可以使用字符串常量或作为字符串变量,因此您可以使用context_processor来设置要扩展的模板的名称。
答案 1 :(得分:0)
你需要的是django-cms的show_menu_below_id标签。使用各自的id(高级字段集,在页面底部)创建页面使用者和生成者,然后开始为每个页面构建页面层次结构。
然后在模板中使用标签:
<ul>
{% if user.get_profile.consumer %}
{% show_menu_below_id "consumer" %}
{% else %}
{% show_menu_below_id "provider" %}
{% endif %}
</ul>