我正在寻找一个django模板标签,它将计算单词和子串整个段落,而不会删掉单词。有内置功能吗?我尝试在Django模板文档中查看内置函数列表但找不到任何内容。
请指教?
答案 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#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的开发版本中,所有这些过滤器都是不幸的。