Django CMS - check if placeholder is empty

If you want additional content to be displayed in case the placeholder is empty, use the or argument and an additional {% endplaceholder %} closing tag. Everything between {% placeholder "..." or %} and {% endplaceholder %} is rendered in the event that the placeholder has no plugins or the plugins do not generate any output.

Example:

{% placeholder "content" or %}

There is no content.

{% endplaceholder %}

There is no built-in way to do this at the moment in django-cms, so you have to write a custom template tag. There are some old discussions about this on the django-cms Google Group:

  • https://groups.google.com/forum/#!topic/django-cms/WDUjIpSc23c/discussion
  • https://groups.google.com/forum/#!msg/django-cms/iAuZmft5JNw/yPl8NwOtQW4J
  • https://groups.google.com/forum/?fromgroups=#!topic/django-cms/QeTlmxQnn3E
  • https://groups.google.com/forum/#!topic/django-cms/2mWvEpTH0ns/discussion

Based on the code in the first discussion, I've put together the following Gist:

  • https://gist.github.com/timmyomahony/5796677

I use it like so:

{% load extra_cms_tags %}
{% get_placeholder "My Placeholder" as my_placeholder %}

{% if my_placeholder %}
<div>
    {{ my_placeholder }}
</div>
{% endif %}