2013-06-17 7 views
6

मैं का उपयोग करें:Django सीएमएस - चेक यदि प्लेसहोल्डर खाली है

  • DjangoCMS 2.4
  • Django 1.5.1
  • अजगर 2.7.3

मैं अपने प्लेसहोल्डर अगर जाँच करने के लिए चाहते हैं खाली है।

<div> 
    {% placeholder "my_placeholder" or %} 
    {% endplaceholder %} 
</div> 

मैं प्लेसहोल्डर खाली होने पर प्लेसहोल्डर के बीच HTML नहीं बनाना चाहता हूं।

{% if placeholder "my_placeholder" %} 
<div> 
    {% placeholder "my_placeholder" or %} 
    {% endplaceholder %} 
</div> 
{% endif %} 

उत्तर

14

कोई अंतर्निहित तरीका Django-सेमी में इस समय यह करने के लिए नहीं है, इसलिए यदि आप एक कस्टम टेम्पलेट टैग लिखने के लिए की है। वहाँ django-cms Google समूह पर इस बारे में कुछ पुराने विचार-विमर्श कर रहे हैं:

पहले चर्चा में कोड के आधार पर, मैंने निम्नलिखित गिस्ट को एक साथ रखें:

मैं बहुत की तरह उपयोग:

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

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

मैं एक नौसिखिया हूं। फ़ाइल कहां रखना चाहिए था? – 21S

+3

यह एक टेम्पलेट टैग है, इसलिए आपको अपने अनुप्रयोगों में से एक में 'templatetags' नामक फ़ोल्डर बनाना होगा, फिर फ़ाइल आयात करें (उदाहरण के लिए 'extra_cms_tags.py') अपने टेम्पलेट कॉल में {{% load extra_cms_tags%} 'आयात करने के लिए –

+0

धन्यवाद। आपने अभी अपना दिन बनाया है। – 21S

0

यहाँ एक बहुत ही कॉम्पैक्ट समाधान है।

खाका फिल्टर:

@register.filter 
def placeholder_is_empty(request, slot): 
    page = request.current_page 
    placeholder = page.placeholders.get(slot=slot) 
    number_of_cmsplugins = placeholder.cmsplugin_set.count() 
    return number_of_cmsplugins > 0 

टेम्पलेट में उपयोग:

{% if request|placeholder_is_empty:'myplaceholder' %} 
    <h1>Here comes some content... </h1> 
{% endif %} 
3

यदि आप चाहते हैं अतिरिक्त सामग्री मामले में प्रदर्शित करने के लिए प्लेसहोल्डर खाली है, or तर्क का उपयोग और एक अतिरिक्त {% endplaceholder %} अंतिम टैग । {% placeholder "..." or %} और {% endplaceholder %} के बीच सब कुछ इस घटना में प्रस्तुत किया जाता है कि प्लेसहोल्डर में कोई प्लगइन्स नहीं है या प्लगइन्स कोई आउटपुट उत्पन्न नहीं करते हैं।

उदाहरण:

{% placeholder "content" or %} 

There is no content. 

{% endplaceholder %} 
+0

यह सही जवाब होना चाहिए। सुपर सरल और टेम्पलेट टैग की आवश्यकता नहीं है। –

+1

यह बहुत अच्छा है, लेकिन यह आपको HTML सामग्री को केवल आउटपुट करने की अनुमति नहीं देता है यदि प्लेसहोल्डर खाली नहीं है। – Flimm

0

आप क्या हासिल करने की कोशिश कर रहे हैं पर निर्भर करता है, तो आप बस सीएसएस तत्व को छिपाने के लिए उपयोग करते हैं :empty चयनकर्ता का उपयोग सामग्री नहीं है सकते हैं। और यदि आप सफेद रिक्त स्थान के बारे में चिंतित हैं तो आप उन्हें हटाने के लिए Django के इन-बिल्ड {% spaceless %} टेम्पलेट टैग का उपयोग कर सकते हैं।

{% spaceless %} 
<div class="hide_if_empty"> 
    {% placeholder "my_placeholder" %} 
</div> 
{% endspaceless %} 

और यह सीएसएस:

तो आप इस टेम्पलेट प्राप्त होता

hide_if_empty:empty { 
    display: none; 
} 
नहीं

वास्तव में क्या के रूप में यह एचटीएमएल को दूर नहीं करता के लिए कहा गया था - लेकिन इस का समाधान होगा सबसे आम मामला जहां कोई यह जांचना चाहता है कि कोई स्थान धारक खाली है या नहीं, और उसे नए टेम्पलेट टैग की शुरूआत की आवश्यकता नहीं है।

संबंधित मुद्दे