来自模板变量的 Django-cms 占位符命名

Django-cms Placeholder naming from template variable

我正在努力生成一个菜单,允许用户将图像和文本描述上传到菜单的每个子部分。这是当前代码(用于显示菜单的自定义模板):

{% for lowest in lower.children %}
    {% with lowest.get_menu_title as title %}
        <div id="product_box">
            <div id="product_image">
                {% placeholder title %}
            </div>
        </div>
        <div id="product_summary">
            <h3>
                <a href="{{ lowest.attr.redirect_url|default:lowest.get_absolute_url }}">
                                    {{title}}
                </a>
            </h3>
            <p>
                {% placeholder "Text" %}
                <a href="{{ lowest.attr.redirect_url|default:lowest.get_absolute_url }}">Learn More</a>
            </p>
        </div>
    {% endwith %}
{% endfor %}

(现在不要担心 {% 占位符 "Text" %},我只是还没有更改那部分,因为我无法让前者工作)。 页面呈现,但唯一可见的插件是 "TITLE" 和 "Text"(同样,不用担心 "text")。

我没有找到任何说明占位符不能使用变量命名的文档,但到目前为止我已经尝试了所有的方法,从 {{title}} 到 {% placeholder lowest.get_menu_title %} 全部似乎只是将它们解释为字符串,分别显示 {{TITLE}} 或 LOWEST.GET_MENU_TITLE 作为占位符名称。

所以,我的问题是:我可以将模板中的变量名称分配给占位符(以便我可以根据菜单名称在 for 循环中生成唯一的占位符)吗?

从此处查看代码库:https://github.com/divio/django-cms/blob/develop/cms/templatetags/cms_tags.py#L284 占位符模板标记的 'name' 参数似乎始终被解释为字符串,因此,它目前不能是变量赋值。

它不完全清楚你打算在这里做什么,但我想知道你是否应该考虑使用 django 模型来表示你所有的各种实例,然后使用 PlaceholderField (http://django-cms.readthedocs.org/en/support-3.0.x/how_to/placeholders.html)。您仍然无法通过模板变量 define/reference 占位符,但您可以随后遍历您的实例并依次显示它们的 PlaceholderField。

希望对您有所帮助。

如果可以使用静态占位符,您可以使用 add 内置模板过滤器来构建字符串,然后将其传递给占位符标记。
例如:

{% static_placeholder title|add:"-placeholder" %}

有一个解决方法:

{% with child.title as name %}{% static_placeholder name %}{% endwith %}

我用它来将可自定义的链接添加到导航栏菜单中。 结果出奇的稳定。

现在我已经为我们的设计师创建了一个私人页面来自定义菜单。

在页面上获取从 {% show_menu %} 生成的列表,一个包含实际的导航栏模板和一个包含预定义占位符的列表。

遗憾的是,这些占位符必须预定义,因为模板中的占位符不会在结构板中呈现