0

在我的 django 模板中,我有一个对象列表,其呈现如下:

<li class="keys">
{% for key in job.key_list|slice:":2" %}
    {% if not forloop.last %}
        <a href="/keys/{{ key.id }}/{{ key }}/">{{ key }}</a>,
    {% else %}
        <a href="/keys/{{ key.id }}/{{ key }}/">{{ key }}</a>
    {% endif %}
{% endfor %}
</li>

这将列表输出为:

some_key, some_key_two

我想将字符数截断为 20但在整个列表中。因此它呈现如下内容:

some_key, some_key_t...

我知道 django 中可用的truncatecharstruncatewords过滤器,但它们在模板中的字符串变量上工作。

我该如何实现这个功能?

4

1 回答 1

1

哇,这是一个奇怪的要求。您必须将其实现为模板标签或自定义过滤器,以获取列表并对其进行转换。

@register.filter(name='truncatinator')
def truncatinator(value, arg):
    strings = ",".join(value)
    if len(strings) >= arg:
        part = strings[0:19] + "..."
    return part.split(',')

并像这样使用它{% for object in job.key_list|truncatinator:"20" %}

但是您会注意到,您将在此处循环遍历一个字符串列表而不是您的对象,这会给您带来以下缺点:您将无法访问您的.id. 这也可以修改。

我会用 Javascript 来代替,但我认为 Django 不应该对此负责。

于 2013-05-20T09:34:00.273 回答