Django TemplateTag - PullRequest
       4

Django TemplateTag

1 голос
/ 16 января 2011

ищу тег шаблона django, который будет подсчитывать слова и подстраивать целый абзац, не отсекая слова. Есть ли встроенная функция? Я попытался просмотреть список встроенных функций в документации по шаблону Django, но ничего не смог найти.

Пожалуйста, совет?

Ответы [ 3 ]

1 голос
/ 17 января 2011

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

{% splitarticle some_data word_count %}
    {{ pre_part }}
    {% if post_part %}
       {{ post_part }}
     {% endif %}

И он вернет две переменные

И кодВы должны положить в / templatetags /

from django import template
from django.utils.encoding import force_unicode

def split_by_sentence(text, word_count):
    words = force_unicode(text).strip().split(' ')
    word_count = int(word_count)
    if len(words)>word_count:
        cnt = word_count
        for word in words[word_count:]:
            cnt+=1
            if '.' in word or '?' in word or '!' in word:
                break
        if cnt>=len(words):
            cnt = word_count

        pre = ' '.join(words[:cnt])
        post = ' '.join(words[cnt:])
        return pre, post    
    else:
        return text, None

register = template.Library()
@register.tag
def splitarticle(parser, token):
    try:
        tag, data, word_count = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError('splitarticle parsing error')
    return SplitArticleNode(data, word_count)

class SplitArticleNode(template.Node):
    def __init__(self, data, word_count):
        self.data = template.Variable(data)
        self.word_count = word_count
    def render(self, context):
        data = self.data.resolve(context)
        context['pre_part'], context['post_part'] = split_by_sentence(data, self.word_count)
        return ''
1 голос
/ 16 января 2011

Насколько я знаю, для этого нет встроенного тега. В зависимости от природы слов, которые вы хотите (они не находятся внутри, или являются частью цикла for - хотя даже тогда вы можете просто сделать это рекурсивно), вы можете просто сделать то, что вы хотите в views.py и передать результат как переменная к шаблону?

То есть вы выполняете подстроки и подсчет слов в представлениях и передаете ответ в шаблон в виде переменной / списка?

0 голосов
/ 01 ноября 2011

Я думаю, вам нужен фильтр.Пока что смотрите документацию шаблона django для фильтра срезов https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#slice.Также обратите внимание на фильтры trucatechars и trucatewords там https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#truncatechars, https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#truncatewords. Другой вариант - https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#truncatewords-html, который подходит для html.Все эти фильтры, к сожалению, находятся в разрабатываемой версии django

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