gri*_*igy 72 django django-templates
Django有truncatewords模板标签,它可以在给定的字数下剪切文本.但是没有像truncatechars那样的东西.在给定的字符长度限制下剪切模板中文本的最佳方法是什么?
Ban*_*jer 138
最近在Django 1.4中添加了这个.例如:
{{ value|truncatechars:9 }}
Run Code Online (Sandbox Code Playgroud)
cai*_*aio 52
{{ value|slice:"5" }}{% if value|length > 5 %}...{% endif %}
Run Code Online (Sandbox Code Playgroud)
更新
从版本1.4开始,Django有一个内置的模板标签:
{{ value|truncatechars:9 }}
Run Code Online (Sandbox Code Playgroud)
我制作了自己的模板过滤器,将"..."添加到(截断的)字符串的末尾(最后一个单词):
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
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢创建自己的自定义模板标签,请考虑在其中使用 Django util Truncator。以下是示例用法:
>>> 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 ...'
Run Code Online (Sandbox Code Playgroud)
然后你可以把它放在一个模板标签中:
from django import template
from django.utils.text import Truncator
register = template.Library()
@register.filter("custom_truncator")
def custom_truncator(value, max_len, trunc_chars=True):
truncator = Truncator(value)
return truncator.chars(max_len) if trunc_chars else truncator.words(max_len)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65631 次 |
| 最近记录: |