2011-10-25 8 views
8

私はDjangoでブログアプリケーションを構築しています。私はすべてのブログを表示するときに、それぞれのエントリで小さなブログ抜粋を表示したいと思います。どのように私はそれを行うことができます誰も教えてくれる?Djangoのブログ抜粋

これを行う1つの方法は、 各ブログエントリの固定数の単語を保存することです.20語としましょう。しかし、それは冗長な情報 をデータベースに格納することになります。それを行う良い方法はありますか?

+0

あなたは抜粋が編集可能かどうかになりたい場合に応じて、正解を決定する。単純に抜粋(自己)でそれを行うことができ、特定の文字列の長さに細断された本文を返し、もしあればhtmlを消毒します。 –

答えて

14

truncatewordsテンプレートフィルタを使用することをお勧めします。

テンプレートの例:

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

ブログのコンテンツはオープンタグはトランケーション・ポイントの後に閉じていることを確認してください(またはHTMLタグを取り除くためにstriptagsと結合)するtruncatewords_htmlを使用して、HTMLとして保存されている場合。

あなたは文字(ない言葉)に切り捨てしたい場合は、sliceを使用することができます。

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

(出力最初の10文字)。コンテンツがHTMLとして保存されている場合

、オープンタグの問題を回避するためにstriptagsと結合:{{blogpost.content|striptags|slice:":10"}}

+1

これは単語を特定の長さに切り捨てます...ただし、単語の長さが長くなる可能性があり、ボックスが大きくなりすぎないようにするために、特定の文字数に切り捨てたい場合は何もありません。 – Sachin

+0

Ifブログモデルに要約フィールドを追加することにした場合、要約が空白の場合(テンプレートのifタグとelseタグを使用して)truncatewordsにフォールバックすることができます。しかし、一般的に、これを行うための一般的な方法として、テンプレートタグ/フィルタを切り捨てる方法があります。 –

+0

@Sachin:文字数を切り捨てて更新された回答。 – codeape

2

ジャンゴ1.4以降では、特定の長さの文字列を切り捨て、...でそれを終了しますtruncatecharsフィルタがあります。それは実際には特定の長さから3を切り捨て、最後の3文字は...になります。

1

やや関連..

私はこの質問への答えを提供:Django strip_tags template filter add space <のp>タグでHTMLタグや短いコンテンツを含む抜粋を行う際に他の人を助けるかもしれません。

これに代えて、この..

"<p>This is a paragraph.</p><p>This is another paragraph.</p>" 
これに

..

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

を変換することができます。..

'This is a paragraph.This is another paragraph.' 
関連する問題