2011-12-18 85 views
3

我正在使用Django的內置truncatewords_html過濾器,它最後加上了「...」,而我想用鏈接「See More」替換它。Django HTML截斷

我該如何做到這一點?

+0

可能重複的[如何發現內容被截斷?](http://stackoverflow.com/questions/1802625/how-to-find-that-the-content-is-truncated) – 2012-03-01 18:57:27

回答

8

這將是最好編寫自己的過濾器。您可以獲取truncatewords_html的源代碼並將其用作過濾器的模板。它應該進行一些更改以獲得您想要的內容,然後您只需註冊模板並確保將其加載到要使用它的頁面上,並且應該很好。

更多信息 https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

https://code.djangoproject.com/browser/django/trunk/django/template/defaultfilters.py#L288

看到這個頁面你應該能夠複製的方法,只是改變代碼到這一點。

return Truncator(value).words(length, html=True, truncate=' see more')

你想使「看多」的鏈接,這將需要更多的代碼。我會改變過濾器來接受另一個param,它是'see more'的鏈接。

然後,而不是隻有'看更多'傳遞給截斷器,你會通過HTML鏈接。

+0

應注意上面的示例代碼是指我相信的Django的最新開發版本。它不適用於1.3.1,因爲'django.utils.text'庫還沒有'Truncator'類。 – 2011-12-18 21:10:57

+0

好點,我從代碼中獲得了代碼,它是仍在開發中的1.4代碼。 – 2011-12-18 21:15:32

+0

我不得不再次檢查 - 我想了一會兒,我正在運行舊代碼。 – 2011-12-18 21:21:48

1

如果您想傳遞自定義鏈接,可以這樣做。

定義自定義過濾器:

{{ text|truncatewords_html_with_link:"5, <a class=\"read-more\" href=\"/your_url/\">Read More</a>" }} 
+0

我喜歡你放在一起的東西,但是如果你只是將URL傳遞給過濾器,並讓過濾器獲取鏈接並添加HTML,就可以更容易。 – 2011-12-18 21:12:48

+0

是的,我認爲你是對的。嘗試傳遞完整的HTML鏈接有點太雜亂。只是如果你想定製'閱讀更多'鏈接。 – 2011-12-18 21:20:58

+0

是的,我猜如果你想自定義閱讀更多的鏈接,你可以通過它作爲第二個參數,並讓它默認閱讀更多,如果不通過 – 2011-12-18 21:36:04

0

在Django 1.8相關的代碼讀取:

from django import template 
from django.utils.safestring import mark_safe 
from django.utils.text import truncate_html_words 

register = template.Library() 

@register.filter 
def truncatewords_html_with_link(value, arg): 
    """ 
    Truncates HTML after a certain number of words and concatenates a link 

    Argument: String - Number of words to truncate after and the link, 
    separated by a comma 
    """  
    arg_list = arg.split(',') 
    try: 
     length = int(arg_list[0]) 
    except ValueError: 
     return value 
    return mark_safe(truncate_html_words(value, length, arg_list[1])) 

從你的模板調用它。如果你正在使用語言環境

truncate = pgettext(
    'String to return when truncating text', 
    '%(truncated_text)s...') 

和翻譯文件,將以下內容放入您的*.po文件中:

msgid "String to return when truncating text" 
msgstr "Short version: %(truncated_text)s <a class='see-more-link'>see more</a>" 

雖然,根據點擊鏈接時發生的情況,添加它可能不會很有幫助。您可以使用另一個佔位符,但是您必須確保使用此消息字符串來替換佔位符。