2011-10-25 12 views
8

Sto costruendo un'applicazione per blog in Django e quando visualizzo tutti i blog voglio mostrare un piccolo estratto del blog con ogni voce. Qualcuno può dirmi come posso farlo?Estratto del blog in Django

Un modo per farlo sarebbe quello di fare un campo in più e memorizzare un numero fisso di parole per ogni blog, diciamo 20 parole. Ma poi sarebbe immagazzinare le informazioni ridondanti nel database. C'è un modo migliore per farlo?

+0

A seconda se si desidera che il brano sia modificabile o meno determina la risposta corretta. Potrebbe farlo semplicemente con un estratto def (self) e restituire il corpo tagliato a una certa lunghezza di stringa e quindi disinfettare l'html, se presente. –

risposta

14

Suggerisco di utilizzare il filtro modello truncatewords.

esempio Template:

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

Se il contenuto del blog è memorizzato in formato HTML, utilizzare truncatewords_html per garantire che i tag aperti vengono chiusi dopo il punto di troncamento (o combinare con striptags per rimuovere i tag html).

Se si desidera troncare su personaggi (non parole), è possibile utilizzare slice:

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

(uscite primi 10 caratteri).

Se il contenuto è memorizzato come HTML, si combinano con striptags per evitare aperti problemi Tags: {{blogpost.content|striptags|slice:":10"}}

+1

Questo troncherà le parole ad una lunghezza specifica ... Comunque c'è qualcosa se voglio troncare un numero specifico di caratteri perché le parole possono essere più lunghe e non voglio che la mia casella diventi troppo grande – Sachin

+0

Se decidi di aggiungere un campo di riepilogo nel modello del tuo blog, puoi ricorrere alle truncatewords se il riepilogo è vuoto (utilizzando if e else nei tag). Ma generalmente il tag/filtro modello troncato è il metodo popolare per farlo. –

+0

@Sachin: risposta aggiornata w/troncata al conteggio dei caratteri. – codeape

2

In Django 1.4 e più tardi, c'è un filtro truncatechars che troncare una stringa in un determinato periodo e terminare con .... In realtà lo tronca alla lunghezza specifica meno 3 e gli ultimi 3 caratteri diventano ....

1

in qualche modo correlato ..

ho appena fornito una risposta a questa domanda: Django strip_tags template filter add space che possono aiutare gli altri quando si effettua estratti che contengono tag HTML e brevi contenuti in < p> tag.

aiuta a convertire questo ..

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

a questo ..

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

invece di questo ..

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