Я использую встроенный truncatewords_html фильтр Django, и он добавляет "...", в конце концов, вместо этого я хочу чтобы заменить это ссылкой "Подробнее".
Как я могу это достичь?
Я использую встроенный truncatewords_html фильтр Django, и он добавляет "...", в конце концов, вместо этого я хочу чтобы заменить это ссылкой "Подробнее".
Как я могу это достичь?
Лучше всего написать собственный фильтр. Вы можете взять исходный код для 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".
Затем вместо того, чтобы просто "видеть больше" передано в Truncator, вы передадите ссылку HTML.
Если вы хотите передать пользовательскую ссылку, это можно сделать следующим образом.
Определите свой настраиваемый фильтр:
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>" }}
Соответствующий код в 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>"
Хотя, в зависимости от того, что должно произойти, когда вы нажимаете ссылку, добавляя ее таким образом, может быть не очень полезно. Вы можете использовать для этого другой заполнитель, но тогда вам нужно будет заменить местозаполнитель, если эта строка сообщения будет использована.