Django有truncatewords
模板标签,用于剪切给定字数的文本。但是没有像 truncatechars 那样的东西。
在给定的字符长度限制下剪切模板中文本的最佳方法是什么?
答案 0 :(得分:127)
答案 1 :(得分:51)
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
<强>更新强>
从版本1.4开始,Django就有了built-in template tag:
{{ value|truncatechars:9 }}
答案 2 :(得分:9)
我制作了自己的模板过滤器,将“...”添加到(截断的)字符串的最后一个字的末尾:
from django import template
register = template.Library()
@register.filter("truncate_chars")
def truncate_chars(value, max_length):
if len(value) > max_length:
truncd_val = value[:max_length]
if not len(value) == max_length+1 and value[max_length+1] != " ":
truncd_val = truncd_val[:truncd_val.rfind(" ")]
return truncd_val + "..."
return value
答案 3 :(得分:3)
答案 4 :(得分:2)
您应该编写自定义模板过滤器:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters
了解truncatewords
django.utils.text
的构建方式
答案 5 :(得分:2)
如果您更喜欢创建自己的自定义模板标记,请考虑在其中使用Django util Truncator 。以下是一个示例用法:
array(9) {
["Host"]=>
string(24) "ultimate.bleupage.online"
["Connection"]=>
string(10) "keep-alive"
["User-Agent"]=>
string(115) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
["Cache-Control"]=>
string(8) "no-cache"
["Postman-Token"]=>
string(36) "6330a309-ffcf-d72e-936a-bf10ff154d45"
["Accept"]=>
string(3) "*/*"
["Accept-Encoding"]=>
string(13) "gzip, deflate"
["Accept-Language"]=>
string(26) "en-GB,en-US;q=0.8,en;q=0.6"
["Cookie"]=>
string(36) "PHPSESSID=p2m0cc7sq7kn8fk2motvrobnn4"
}
然后你可以将它放在模板标签中:
>>> from django.utils.text import Truncator
>>> Truncator("Django template tag to truncate text")
<Truncator: <function <lambda> at 0x10ff81b18>>
>>>Truncator("Django template tag to truncate text").words(3)
u'Django template tag...'
Truncator("Django template tag to truncate text").words(1)
u'Django...'
Truncator("Django template tag to truncate text").chars(20)
u'Django template t...'
Truncator("Django template tag to truncate text").chars(10)
u'Django ...'
答案 6 :(得分:1)
答案 7 :(得分:1)
您可以使用类似的代码实现目标:
{{ value_of_text|truncatechars:NUM_OF_CHARS_TO_TRUNCATE}}
其中NUM_OF_CHARS_TO_TRUNCATE
是要离开的字符数。
答案 8 :(得分:0)
添加“truncate”过滤器是4年的功能请求,但最终登陆后备箱,据我了解https://code.djangoproject.com/ticket/5025 - 所以我们要等待下一个版本或使用trunk。