Django-cms占位符从模板变量命名

时间:2015-03-10 18:12:08

标签: django django-templates django-cms

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

{% 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 %}

(现在不要担心{%placeholder&#34; Text&#34;%},我还没有改变那部分,因为我无法让前者工作)。 页面呈现,但只有可见的唯一插件是&#34; TITLE&#34;和&#34;文字&#34; (再次,不用担心&#34;文字&#34;)。

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

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

3 个答案:

答案 0 :(得分:0)

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

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

希望这有帮助。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

有一种解决方法:

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

我已使用它向导航栏菜单添加可自定义的链接。 结果令人惊讶。

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

页面上的

获取一个由{% show_menu %}生成的列表,一个带有实际导航栏模板,一个带有预定义占位符的列表。

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