如何在 Django 模板引擎上截断/切片字符串?

Posted

技术标签:

【中文标题】如何在 Django 模板引擎上截断/切片字符串?【英文标题】:How to truncate/slice strings on Django Template Engine? 【发布时间】:2013-07-09 21:18:47 【问题描述】:

index.html

<td>% if place or other_place or place_description% place  other_place place_description</td>

这是显示模板中的所有数据。如果字符串长度超过 80,我想截断它。

条件是, 1.如果place变量超过80个字符,应将其截断,不需要显示其他两个变量,如other_place和place_description。

2.如果place变量和other_place变量超过80个字符,这种情况下应该从place_variable截断,不需要显示place_description变量。

3.如果这三个都是他们的,并且第80个字符是由place_description组成的,需要从他们截断。

所有字段都不是强制性的,所以无论显示什么字段,它都应该只显示80个字符。

需要帮助才能做到这一点。

谢谢

【问题讨论】:

【参考方案1】:

对于 pre-django 1.4,您可以使用 slice:

% if place or other_place or place_description%
    % with place|add:other_place|add:place_description as pl %
        % if pl|length > 80 %
            pl|slice:80...
        % else  %
            pl 
        % endif %
    % endwith %
% endif %

如果您使用的是 django 1.4 或更高版本,

你可以使用truncatechars

% if place or other_place or place_description%
    % with place|add:other_place|add:place_description as pl %
       pl|truncatechars:80
    % endwith %
% endif %

【讨论】:

我会使用 value|truncatechars:80 模板过滤器而不是切片,因为它会添加省略号并将字符串表示为截断 啊,对不起!那就继续吧! :) @karthikr,我不能使用 truncatechars,这在 django 1.3 中不受支持 我收到此模板语法错误“渲染时捕获 AttributeError:'int' 对象没有属性 'split'” 它可能在代码的其他地方。如果您删除此 sn-p ,您不会收到此错误?【参考方案2】:

您可能可以使用 add/truncatechars 的组合来做到这一点,例如

 place|add:other_place|add:place_description|truncatechars:80

【讨论】:

我正在使用 django 1.3,这可能适用 >django 1.4 啊好的,你可以基于 django 创建自己的过滤器,例如github.com/django/django/blob/master/django/template/…【参考方案3】:

您也可以使用 'cut',它是 django 内置模板的一部分

例如如果

 file.pdf.name

给出'store/pdfs/verma2010.pdf'

 file.pdf.name | cut:'store/pdfs/'

会给'verma2010.pdf'

【讨论】:

以上是关于如何在 Django 模板引擎上截断/切片字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何切片将显示在 HTML 标记中的字符串值?

在Django中截断文本但向后方向

如何使用 javascript(或类似的)在 Django 模板中切片列表项

Django 使用模板标签拆分文本字段

截断 Django CMS 占位符

Google App Engine:如何在给定数量的字符后截断字符串