2011-10-25 15 views
8

Estoy construyendo una aplicación de blog en Django y cuando visualizo todos los blogs, quiero mostrar un pequeño extracto del blog con cada entrada. ¿Alguien puede decirme cómo puedo hacer eso?Extracto del blog en Django

Una manera de hacerlo sería hacer un campo extra y almacenar un número fijo de palabras para cada entrada del blog, digamos 20 palabras. Pero eso sería almacenar información redundante en la base de datos. ¿Hay una mejor manera de hacer eso?

+0

Dependiendo de si desea que el extracto sea o no editable determina la respuesta correcta. Podría hacerlo simplemente con un fragmento de def (self) y devolver el cuerpo cortado a una cierta longitud de cadena y luego desinfectar el html, en su caso. –

Respuesta

14

Le sugiero que utilice el filtro de plantilla truncatewords.

ejemplo Plantilla:

<ul> 
{% for blogpost in blogposts %} 
    <li><b>{{blogpost.title}}</b>: {{blogpost.content|truncatewords:10}}</li> 
{% endfor %} 
</ul> 

Si el contenido del blog se guarda como HTML, utilice truncatewords_html para asegurar que las etiquetas abiertas se cierran después de que el punto de truncamiento (o se combinan con striptags para eliminar etiquetas HTML).

Si desea truncar en los personajes (no palabras), puede utilizar slice:

{{blogpost.content|slice:":10"}} 

(salidas primeros 10 caracteres).

Si el contenido se almacena como HTML, se combinan con striptags para evitar los problemas etiquetas de apertura: {{blogpost.content|striptags|slice:":10"}}

+1

Esto truncará las palabras a una longitud específica ... Sin embargo, hay algo si quiero truncar a un número específico de caracteres porque las palabras pueden ser más largas y no quiero que mi caja sea demasiado grande – Sachin

+0

Si Si decide agregar un campo de resumen en su modelo de blog, puede recurrir a truncatewords si el resumen está en blanco (utilizando las etiquetas if y else en la plantilla). Pero, en general, la etiqueta/filtro de plantilla truncada es el método popular para hacer esto. –

+0

@Sachin: Respuesta actualizada con truncar a recuento de caracteres. – codeape

2

En Django 1.4 y posteriores, hay un filtro truncatechars que truncará una cadena a una longitud específica y terminar con .... En realidad, lo trunca en la longitud específica menos 3, y los últimos 3 caracteres se convierten en ....

1

Poco relacionado ..

acabo presentó una respuesta a esta pregunta: Django strip_tags template filter add space que pueden ayudar a otros al hacer extractos que contienen etiquetas HTML y contenido corto en < p> etiquetas.

ayuda a convertir este ..

"<p>This is a paragraph.</p><p>This is another paragraph.</p>" 

a esta ..

'This is a paragraph. This is another paragraph.' 

en lugar de esto ..

'This is a paragraph.This is another paragraph.'