【发布时间】:2017-01-31 10:09:31
【问题描述】:
我正在测试 Django CMS,并且正在寻找一种方法来一次性为所有语言创建页面。目前我必须为每种语言创建一个新页面,并且不同语言之间不共享内容/插件/结构。
有没有办法做到这一点?
提前致谢
【问题讨论】:
我正在测试 Django CMS,并且正在寻找一种方法来一次性为所有语言创建页面。目前我必须为每种语言创建一个新页面,并且不同语言之间不共享内容/插件/结构。
有没有办法做到这一点?
提前致谢
【问题讨论】:
@Fabian 提供的管理命令非常有用。 我更新了命令代码here 以反映 django-cms API 的变化:
# pages = [head] + list(head.children.drafts())
pages = [head] + list(head.get_child_pages().drafts())
针对 django-cms 3.5.3 和 3.7.4 进行了测试。 所有学分都归@Fabian 所有。
【讨论】:
内置管理命令./manage.py cms copy lang 将整个页面树从一种语言复制到另一种语言。页面树保持不变,插件树被转移。如果您想为整个网站引导一种新语言,那很好。
如果您想复制仅一页的插件树,您可以使用工具栏中的语言菜单:Language -> Copy all plugins 如果您正在查看目标语言 .这很好,如果你只有一页的话。
如果您想为 页面树(即页面及其所有子页面)引导一种语言,那么您要么有很多点击要做,要么使用我创建的这个简短的管理命令在原来的 DjangoCMS ./manage.py cms copy long 命令上。它允许通过其 id 或源语言中的名称指定要复制的页面(注意:它必须是唯一的)。
将this snippet 复制到应用程序的任何命令文件夹中:my_app/management/commands/。复制文件后,您将获得一个新的 Django 管理命令:./manage.py copylang。用法示例:
./manage.py copylang --from-lang=en --to-lang=nl --tree="Home"
./manage.py copylang --from-lang=en --to-lang=nl --tree_id=36 --force
--tree_id 选项所需的页面 ID 可以通过将鼠标悬停在页面的预览图标上从页面管理员轻松推断出来。页面 ID 是链接的一部分:.../page/page_id/lang/preview/...
如果您省略 --tree 和 --tree_id 选项,该命令将恢复为 DjangoCMS 的原始 cms copy lang 行为。
【讨论】: