使用 Django 模板过滤器限制字符数

Posted

技术标签:

【中文标题】使用 Django 模板过滤器限制字符数【英文标题】:Limit number of characters with Django Template filter 【发布时间】:2011-03-29 21:19:28 【问题描述】:

我正在尝试在项目列表上输出描述的前 255 个字符,并且正在寻找一种方法来获得它。

示例:我有一个包含 300 个左右字符的变量。

我这样称呼那个变量, my_variable|characterlimit:255

它只会返回该变量的前 255 个字符。

如果这个标签不存在,我将简单地创建它(并建议它进入 django),但我想在花时间做之前确保它不存在。谢谢!

【问题讨论】:

【参考方案1】:

如果“my_variable”是字符串,您可以利用slice filter,它将字符串视为字符列表。如果它是一组词,大致等价词是 truncatewords - 但这听起来不太符合您的需要。

truncatewords还在截断结果的末尾添加省略号...

用法类似于

 my_variable|slice:":255" 

【讨论】:

【参考方案2】:

有一个official built-in filter:

 variable|truncatechars:255 

【讨论】:

这会将省略号(“...”)放在被截断的字符串后面(而不是在未截断的字符串后面)。 Slice 没有在其后面加上省略号。我的建议:使用 truncatechars。 同意上述。这在大多数情况下都是正确的(例如,在不阻碍超链接的情况下显示长 URL)。【参考方案3】:

如果你想按单词截断,看看这个 https://docs.djangoproject.com/en/1.4/ref/templates/builtins/#truncatechars

【讨论】:

事实上 - 你在这里链接到“truncatechars”,这正是 OP 要求的(但在 OP 问题被问到后添加)【参考方案4】:

使用标准模板标签更简单的方法是:

 variable|stringformat:".10s" 

在这种情况下,10 是位置参数,对于字符串,它是要显示的最大字符数。

【讨论】:

这对我有用...由于某种原因,“切片”现在不起作用!任何想法,为什么?【参考方案5】:

不幸的是,它不存在。如here 所述,有一些措施可以实现它,但它仍处于设计阶段(嗯,已实现,但正在等待设计决策)。

附加到该票证的补丁包含实现。

【讨论】:

【参考方案6】:

使用模板过滤器截断文本并不适合响应式设计。因此,您还可以使用 css 截断响应式文本。我知道 OP 要求使用 django 模板过滤器来执行此操作。

您可以使用以下方法实现响应式截断文本:

.class 
    width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;

【讨论】:

以上是关于使用 Django 模板过滤器限制字符数的主要内容,如果未能解决你的问题,请参考以下文章

Django - 来自模板标签内变量的字符串

django模板(过滤器)

Django“naturalday”模板过滤器:回退到格式化日期?

在代码中使用 django 内置过滤器(在模板之外)

如何过滤django模板中的特殊字符

DJANGO之自定义模板过滤器