2010-04-23 21 views
11

Şablondaki bir kullanıcıya mesajları görüntülemek için Django Messaging Framework kullanıyordum.Django Mesajları Çerçevesi Mesajlarını Görüntüleme

böyle şablona çıktılamayıp ediyorum:

<ul> 
    {% for message in messages %} 
     <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> 
    {% endfor %} 
</ul> 

Bu herkes nasıl sadece hatayı görüntülemek için herhangi bir fikir olsaydı ben sadece merak vb tüm mesajlar, hataları, uyarı, başarıyı çıkışı gibi mesajlar şey:

{% if messages %} 
    {% for message in messages %} 
     {% if forloop.first %} 
      {% if message.tags == 'error' %} 
       <div class="error"> 
        <ul> 
      {% endif %} 
     {% endif %} 

     <li>{{ message }}</li> 

     {% if forloop.last %} 
       </ul> 
      </div> 
     {% endif %} 
    {% endfor %} 
{% endif %} 
:

<ul> 
    {% for message in messages.errors %} 
     <li>{{ message }}</li> 
    {% endfor %} 
</ul> 

Ben şimdiye kadar ile geldi iyi budur

Herhangi bir fikrin var mı? Şimdiden teşekkürler.

<ul> 
    {% for message in messages.errors %} 
     {% if 'error' in message.tags %}<li>{{ message }}</li>{% endif %} 
    {% endfor %} 
</ul> 

mesaj etiketine mesaj düzeyinin haritalama MESSAGE_TAGS ile yapılandırılabilir:

cevap

9

Bir ifequal koyabilirsiniz.

+0

Cevabınız için teşekkürler, ancak hatalar ve hata mesajlarının çıktısını almak için hataları birkaç kez yinelemek zorunda olduğum anlamına gelir. Bütün hataları kendi başlarına almak için bir yol istedim. – Arif

+1

Olması gerekir: {% if message.tags% 'error'} –

+0

Teşekkürler. Cevabımı güncelledi. –

5

bir faff Biraz, ancak muhtemelen bir özel şablon bağlam işlemci (Bkz https://docs.djangoproject.com/en/dev/ref/templates/api/) ekleyerek bu elde edebiliriz - o zaman settings.py içinde TEMPLATE_CONTEXT_PROCESSORS listesine eklemek

def collect_error_messages(request): 
    messages = get_messages(request) 
    error_messages = [ m for m in messages if 'error' in m.tags] 
    return {'error_messages': error_messages} 

gibi bir şey

<ul> 
    {% for message in error_messages %} 
     <li>{{ message }}</li> 
    {% endfor %} 
</ul> 

mesaja bir dict haritalama hata seviyesini oluşturmak için aynı bir varyasyonu yapabileceğini ve ardından her dict arasında yineleme: ve sonra şablonları yapabilirsiniz.

3

Reto cevabı sadece şablon etiketleri ile yönetilen bu şekilde

{% for message in messages %} 
    {% if 'success' in message.tags %} 

     <div class="alert alert-success"> 
      <a class="close" href="#" data-dismiss="alert">×</a> 
      <strong>Success!</strong> 

       {{ message }} 

     </div> 
    {% endif %} 
{% endfor %} 

{% for message in messages %} 
    {% if 'error' in message.tags %} 
     <div class="alert alert-error"> 
      <a class="close" href="#" data-dismiss="alert">×</a> 
      <strong>Error!</strong> 

       {{ message }} 

     </div> 
    {% endif %} 
{% endfor %} 
{% for message in messages %} 
    {% if 'info' in message.tags %} 
     <div class="alert alert-info"> 
      <a class="close" href="#" data-dismiss="alert">×</a> 
      <strong>INFO!</strong> 

       {{ message }} 

     </div> 
    {% endif %} 
{% endfor %} 
+2

Gerçekten döngüyü tekrar yapmanız gerekiyor mu? İlk döngüde de "message.tags%}" (% elif) hatası "(veya ilkinden sonra tamamen bağımsız bir" if) çalışması da yapmalı gibi görünüyor, değil mi? – user558061

0

benim için çalışıyor:

{% if messages %} 
    {% regroup messages by tags as messages %} 
    <div id="messages"> 
    {% for tags in messages %} 
     <ul class="{{ tags.grouper }}"> 
      {% for message in tags.list %} 
       <li>{{ message|capfirst }}</li> 
      {% endfor %} 
     </ul> 
    {% endfor %} 
    </div> 
{% endif %} 

anahtar {% regroup %} etikettir. tags nitelik message ait extra_tags bunu kullanan yaparsanız böylece <ul> grupları ek alacak içerdiğinden

Bu hala bazı sorunlar vardır.

Gelecek sürümlerde (probably 1.7), sorunun yakında silinmesi için level_tag özniteliği olacaktır.


(En kısa sürede level_tag nitelik kullanılabilir olarak)

{% if messages %} 
    {% regroup messages by level_tag as messages %} 
    <div id="messages"> 
    {% for level in messages %} 
     <ul class="{{ level.grouper }}"> 
      {% for message in level.list %} 
       <li>{{ message|capfirst }}</li> 
      {% endfor %} 
     </ul> 
    {% endfor %} 
    </div> 
{% endif %} 
+0

Tüm mesajları görüntülemek için iyi bir yanıt – ppython

1

ileti etiketlerini kontrol için aşağıdaki kullanabilirsiniz.

{% if message.tags == "error" %} your code here {% endif %}

-1

Tabii ki {% regroup %} etiketiyle yapabilir ama düzgün çalışmak istiyorsanız dictsort filter aswell kullanmak zorunda.İlk olarak, etiketler ada göre sıralanmalı ve sonra gruplandırılmalıdır:

{% if messages %} 
    {% regroup messages|dictsort:"tags" by tags as message_list %} 

    {% for tags in message_list %} 
     <div class="alert alert-{{ tags.grouper }}"> 
      <div class="container"> 
       <ul> 
        {% for message in tags.list %} 
         <li> 
           {{ message }} 
         </li> 
        {% endfor %} 
       </ul> 
       <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> 
      </div> 
     </div> 
    {% endfor %} 
{% endif %} 
+0

basit işleri karmaşık hale getiriyorsunuz –

İlgili konular