Джанго HTML усечение - PullRequest
       18

Джанго HTML усечение

3 голосов
/ 18 декабря 2011

Я использую встроенный truncatewords_html фильтр Django, и в конце он добавляет «...», вместо этого я хочу заменить его ссылкой «Подробнее».

Как мне этого добиться?

Ответы [ 3 ]

9 голосов
/ 18 декабря 2011

Лучше всего написать свой собственный фильтр.Вы можете взять исходный код 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')

Вы хотите сделать ссылку «видеть больше», которая займет больше кода.Я бы изменил фильтр так, чтобы он принимал другой параметр, который является ссылкой для «видеть больше».

Тогда вместо того, чтобы просто «видеть больше» передаваться в Truncator, вы передаете ссылку HTML.

1 голос
/ 19 декабря 2011

Если вы хотите передать пользовательскую ссылку, это можно сделать следующим образом.

Определите свой пользовательский фильтр:

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 голосов
/ 25 января 2016

Соответствующий код в Django 1.8 гласит:

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

Если вы используете файлы LOCALE и файлы перевода, поместите в свои *.po файлы следующее:

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

Хотя,в зависимости от того, что должно произойти, если вы нажмете на ссылку, добавив ее таким образом, это может быть не очень полезно.Вы можете использовать другой заполнитель для него, но тогда вам нужно будет заменить его, где бы ни использовалась эта строка сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...