Django CMS – 在同一模板中为用户和来宾显示不同的内容

Django CMS – Show different content for users and guests in same template

我想使用 Django 1.9Django CMS 3.3.1 在我的主页模板中为用户和访客提供不同的内容.

可以根据认证条件制作子页面并在祖先中显示相应的内容来完成,但这样会使页面结构过于复杂。

有没有一种简单的方法可以将这些 占位符 直接添加到 模板 中?

我已经试过了:

{% extends "base.html" %}
{% load cms_tags %}

{% block title %}{% page_attribute "page_title" %}{% endblock title %}

{% block content %}
    {% if not user.is_authenticated %}
        {% placeholder "guests" %}
    {% endif %}

    {% if user.is_authenticated %}
        {% placeholder "authenticated" %}
    {% endif %}

    {% placeholder "content" %}
{% endblock content %}

但由于我在编辑内容时已通过身份验证,因此我无法访问 guests 占位符。

试试这个:

{% block content %}
    {% if request.toolbar.build_mode or request.toolbar.edit_mode %}

        {% placeholder "guests" %}
        {% placeholder "authenticated" %}

    {% else %}

        {% if not user.is_authenticated %}
            {% placeholder "guests" %}
        {% endif %}

        {% if user.is_authenticated %}
            {% placeholder "authenticated" %}
        {% endif %}

    {% endif %}

    {% placeholder "content" %}
{% endblock content %}

我有一些使用 Django CMS 的经验,但不知道这是否有效。这个想法是通过检查相应的请求变量来检查我们是否处于编辑模式。参见


@V-Kopio 更新:

上面给出的答案在实践中工作正常,但 Django 警告重复占位符。这可以通过组合 ifelse 块来避免:

{% block content %}

    {% if not user.is_authenticated or request.toolbar.build_mode or request.toolbar.edit_mode %}
        {% placeholder "guests" %}
    {% endif %}

    {% if user.is_authenticated %}
        {% placeholder "authenticated" %}
    {% endif %}

    {% placeholder "content" %}
{% endblock content %}