2009-11-26 15 views
7

Bir blog uygulaması oluşturmaya çalışıyorum ve sorun, belirtilen kelimeden daha uzun mesajları kırpmak için şablonumda 'truncatewords_html' etiketini kullandığımda, 'daha fazlasını oku gibi bir başlık ile tamamlanmış gönderiye bağlantı vermem gerekiyor. .. 'kesilmeden sonra. Bu yüzden mesajın kesildiğini veya kesilmediğini bilmeliyim.İçeriğin kesildiği nasıl bulunur?

P.S .: Bu sorunu çözmek için pythonik bir yol mu?

{% ifequal post.body|length post.body|truncatewords_html:max_words|length %} 
    {{ post.body|safe }} 
{% else %} 
    {{ post.body|truncatewords_html:max_words|safe }}<a href="{{ post.url}}">read more</a> 
{% endifequal %} 
görüntülemek istediğiniz içerik length yerleşik filtresi aracılığıyla verilen uzunluğu aşıyor olsun Sen, şablonda kontrol elle ( django docs bakınız) özel bir şablon etiketi yazmak veya verebilir

cevap

4

Bu oldukça kıvrımlıdır, ancak django'nun bazı garip köşeleri vardır. Temelde ben

{% ifnotequal post.body|truncatewords_html:30|length post.body|truncatewords_html:31|length %} 
    <a href="#">read more...</a> 
{% endifnotequal %} 
2

.

+1

+1 ekran uzunluğu aşıyor denetleme gibi basit yöntemi için. Basit ve iyi çalışıyor. –

0

Kontrol dışarı http://code.djangoproject.com/ticket/6799

Bu yama için bir yöntem sağlar ... Eğer x'in kesecek ve x + 1 kelime daha sonra dize kesiliyor edilmemiş ise dize uzunluğu aynı ise anlamaya Kesilmiş metin için varsayılan elipsleri değiştirin.

1

Kişisel tercihinize göre geliyor, ama benim zevkim için şablonda çok fazla iş yapıyorsunuz. Post modelinde read_more_needed() belki de metnin uzunluğuna bağlı olarak True veya False değerini döndüren bir yöntem oluşturabilirim. örneğin:

def read_more_needed(self): 
    from django.utils.text import truncate_html_words 
    return not truncate_html_words(self.body,30)==truncate_html_words(self.body,31) 

Sonra şablon okurdum:

{% if post.read_more_needed %} 
    {{ post.body|truncatewords_html:30|safe }}<a href="{{ post.url}}">read more</a> 
{% else %} 
    {{ post.body|safe }} 
{% endif %} 
+0

Modele "read_more_need()" ifadesini ekleyecekseniz, modelde kesmeyi de yapmalısınız. İçeriğin kesilmiş olup olmadığını, kesmeyi yapan aynı kod belirlemelidir. – Bryce