2011-10-25 70 views
8

我在Django中構建了一個博客應用程序,當我顯示所有博客時,我想顯示每個條目的小博客摘錄。有誰可以告訴我我該怎麼做?Django中的博客摘錄

這樣做的一種方法是爲每個博客條目創建一個額外的字段並存儲固定數量的單詞,比如說20個單詞。但那麼這將在數據庫中存儲冗餘信息 。有沒有更好的方法來做到這一點?

+0

根據,如果你想摘錄可編輯或不確定正確的答案。可以簡單地使用def摘錄(self)來完成,然後將主體切回到特定的字符串長度,然後清理html(如果有的話)。 –

回答

14

我建議你使用truncatewords模板過濾器。

模板例如:

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

如果博客的內容保存爲HTML,使用truncatewords_html確保開放標籤截斷點後關閉(或striptags相結合,去除HTML標籤)。

如果要截斷的字符(沒有的話),你可以使用slice

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

(輸出前10個字符)。

如果內容保存爲HTML,與striptags結合起來,以避免開放標籤的問題:{{blogpost.content|striptags|slice:":10"}}

+1

這將截短單詞到一個特定的長度......但是有什麼,如果我想截斷到特定數量的字符,因爲單詞可以更長的長度,我不希望我的盒子變得太大 – Sachin

+0

如果您決定在您的博客模型中添加摘要字段,如果摘要爲空白(在模板中使用if和else標籤),則可以回退到截斷字詞。但通常截斷模板標籤/過濾器是這樣做的流行方法。 –

+0

@Sachin:更新了回答w /截斷字符數。 – codeape

2

在Django的1.4,後來,有一個truncatechars過濾器,將截斷字符串,以特定的長度,並與...終止它。它實際上將其截斷爲特定長度減3,最後3個字符變成...

1

有點關係..

我只是提供了一個回答這個問題

Django strip_tags template filter add space製作包含HTML標記和< p短content>標記段時,可以幫助別人。

幫助轉換這個..

"<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.'