2011-12-18 4 views
3

は、代わりに、私はリンク 『もっと見る』でこれを置き換えたいです。DjangoのHTMLの切り捨て

どうすればこの問題を解決できますか?

+0

[コンテンツが切り捨てられていることを確認する方法](http://stackoverflow.com/questions/1802625/how-to-find-that-the-content-is-truncated) –

答えて

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')

あなたはより多くのコードを取るのリンク、「より多くのを見る」ようにしたいです。私は 'see more'のリンクである別のパラメータを受け入れるようにフィルタを変更します。

その後の代わりに、ちょうど持つあなたがHTMLリンクを通過する切捨てに渡された「もっと見ます」。

+0

注意する必要があります上のサンプルコードはDjangoの最新の開発版を参照していると私は信じています。 'django.utils.text'ライブラリに' Truncator'クラスがまだないので、1.3.1では動作しません。 –

+0

良い点、私はまだ開発中の1.4のコードであるトランクからコードを得ました。 –

+0

私は二重チェックをしなければなりませんでした - 私は古いコードを実行していました。 –

1

カスタムリンクを渡す場合は、このようにすることができます。

は、カスタムフィルタを定義します。

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])) 

は、あなたのテンプレートからそれを呼び出します。

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

私はあなたがまとめたものが好きですが、URLをフィルタに渡してフィルタにリンクを張り、HTML、ちょうどアイデアを追加させる方が簡単かもしれません。 –

+0

ええ、私はあなたが正しいと思います。完全なHTMLリンクを渡そうとするのはあまりにも面倒です。 「もっと読む」リンクをカスタマイズしたいのであれば、それだけです。 –

+0

ええ、私はあなたが2番目のパラメータとして渡すことができるより多くのリンクをカスタマイズしたいと思っていて、 –

0

ジャンゴ1.8内の関連するコードを読み取ります

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

リンクをクリックしたときに何が起こるかに応じて、このように追加することはあまり役に立ちません。別のプレースホルダを使用することもできますが、このメッセージ文字列が使用されている間はプレースホルダを置き換える必要があります。

関連する問題