django templatetag

时间:2011-01-16 17:54:19

标签: python django

我正在寻找一个django模板标签,它将计算单词和子串整个段落,而不会删掉单词。有内置功能吗?我尝试在Django模板文档中查看内置函数列表但找不到任何内容。

请指教?

3 个答案:

答案 0 :(得分:1)

据我所知,没有内置标签可以做到这一点。根据你想要的单词的性质(它们不在里面,或者是for循环的一部分 - 虽然即便如此,你可以递归地执行此操作)你可以在views.py中执行你想要的操作并传递输出作为模板的变量?

所以你要在视图中进行子字符串和字数统计,并将答案作为变量/列表传递给模板?

答案 1 :(得分:1)

这是我对此的实现。它实际上是一个句子而不是段落,但无论如何你应该得到一个想法。

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

它将返回两个变量

代码。你应该放入< your_app> / 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 ''

答案 2 :(得分:0)

我认为你需要一个过滤器。到目前为止,请查看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#truncatecharshttps://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的开发版本中,所有这些过滤器都是不幸的。