Django усекает слова и показывает искомое слово

#python #django

#python #django

Вопрос:

У меня есть переменная, sentences содержащая:

«Поисковый робот Page начал исследовать Интернет в марте 1996 года, и единственной отправной точкой послужила собственная домашняя страница Page в Стэнфорде. Чтобы преобразовать данные обратных ссылок, собранные для данной веб-страницы, в показатель важности, Брин и Пейдж разработали алгоритм PageRank. Анализируя вывод BackRub, который для данного URL состоял из списка обратных ссылок, ранжированных по важности, пара поняла, что поисковая система, основанная на PageRank, даст лучшие результаты, чем существующие методы (существующие поисковые системы в то время, по сути, ранжировали результаты в соответствии с тем, сколько раз поисковый запрос появлялся на странице).»

Затем я использую усекаемые слова в Django HTML для сокращения представления предложений.

 {{ sentences|truncatewords:30 }}
  

Итак, результат показывает это:

«Поисковый робот Page начал исследовать Интернет в марте 1996 года, и единственной отправной точкой послужила собственная домашняя страница Page в Стэнфорде. Чтобы преобразовать данные обратной ссылки, которые он … «

На самом деле, я хочу показать truncatewords результат с определенным словом, например, «BackRub», поэтому результат должен быть:

«Анализируя выходные данные BackRub, которые для данного URL состояли из списка обратных ссылок, ранжированных по важности, пара поняла, что поисковая система, основанная на PageRank, выдаст … «

Есть ли какие-либо решения?

Спасибо

Ответ №1:

Я думаю, вам следует написать свой собственный тег шаблона, чтобы решить эту проблему.

Вы можете получить начало предложения, которое содержит определенное слово, и возвращать строку, начиная оттуда. Затем вы можете усечь результат, как вы сделали выше. Я считаю, что это не лучшее решение. Но я думаю, что это то, с чего вы можете начать. Смотрите код и результаты ниже:

где-то в templatetags

 import re

from django import template

register = template.Library()


@register.filter
def findsentencebyword(sentence, word):
    matches = re.search("([^.]*?"   word   ".*)", sentence)

    if not matches:
        return sentence

    return matches.group()
  

затем загрузите и используйте его в своем шаблоне, как показано ниже

 {% load <templatetag> %}

{{ sentences|findsentencebyword:"BackRub"|truncatewords:30 }}
  

Вот результат:

введите описание изображения здесь

Комментарии:

1. Это работает. К сожалению, этот фильтр приводит к замедлению загрузки результатов на странице. Надеюсь, что есть какая-либо альтернатива. В целом, спасибо за выбор.

2. @SamudraAjriKifli это из-за регулярного выражения