CMS与Django一起使用

时间:2010-01-08 13:09:23

标签: django localization content-management-system django-cms

我正在使用Django创建一个网站,为各种制作者消费者提供单独的网络用户界面。两个UI(或“子网站”)具有不同的布局,菜单和图形。然而,他们只是从不同的方面(生产者与消费者......)访问相同的数据库和模型。它们都在一个域下托管,UI区分由URL完成。

当我想将CMS集成到此系统时,问题出现了,以便处理菜单结构和文本内容。我该如何处理不同UI的两个不同菜单?我看了一下django-cms和django-page-cms,它们似乎只保留了一个菜单层次结构。

有什么想法吗?

一个肮脏的解决方案是添加例如CMS中每个UI菜单项的不同前缀,并破解CMS代码,以便它只插入正确UI的菜单项(作为show_menu模板标记的参数)。

如果有可能拥有CMS应用程序的多个实例,那么更好的方法是,每个实例都有自己的数据库表。但这是否可能与django和例如django-cms或django-page-cms?

一些进一步的限制:

  • CMS必须支持本地化
  • 我更喜欢运行单个Django实例,以保持配置和测试简单

2 个答案:

答案 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>