2009-11-26 15 views
7

Estoy tratando de crear una aplicación de blog y el problema es cuando uso la etiqueta 'truncatewords_html' en mi plantilla para truncar publicaciones más largas que el número especificado de palabras. Necesito hacer un enlace para completar la publicación por algún título como 'leer más'. .. 'después del truncamiento. Entonces debería saber que la publicación fue truncada o no.¿Cómo encontrar que el contenido está truncado?

P.S .: ¿Es esta una manera pitónica de resolver el problema?

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

Respuesta

4

Esto es bastante intrincado pero django tiene algunas esquinas extrañas. Básicamente Creo que si la longitud de la cadena es el mismo si se trunca en x y x + 1 palabras, a continuación, la cadena no se ha truncado ...

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

Se puede escribir una etiqueta de plantilla personalizada (ver django docs), o manualmente comprobar en la plantilla, si el contenido que desea mostrar excede la longitud dada a través length filtro incorporado.

+1

+1 por el simple método de comprobación de si la pantalla es superior a la longitud. Simple, y funciona bien. –

1

Se trata de una preferencia personal, pero para mi gusto está haciendo demasiado trabajo en la plantilla. Creo que crearía un método en el modelo de publicación, read_more_needed(), que devuelve verdadero o falso según la longitud del texto. por ejemplo:

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) 

Entonces su plantilla leería:

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

Si va a agregar "read_more_need()" al modelo, entonces también debe realizar el truncamiento en el modelo. El mismo código que realiza el truncamiento debería determinar si el contenido se ha truncado. – Bryce

Cuestiones relacionadas