Jinja 无效过滤器,内置过滤器

Dor*_*ore 1 html python django jinja2

我已阅读 Jinja 文档并正在使用truncate过滤器。我完全按照文档中的定义使用它。

从文档:

truncate(s, length=255, killwords=False, end='...', leeway=None) 返回字符串的截断副本。长度由第一个参数指定,默认为 255。如果第二个参数为真,过滤器将按长度剪切文本。否则它将丢弃最后一个字。如果文本实际上被截断,它将附加一个省略号(“...”)。如果你想要一个不同于“...”的省略号,你可以使用第三个参数来指定它。长度仅超出第四个参数中给出的容差范围的字符串将不会被截断。

这是我的代码:

{% if post.replies.all %}
<ul class="accordion" data-accordion data-multi-Expand="true" data-allow-all-closed="true">
{% for reply in post.replies.all %}
        <li class="accordion-item" data-accordion>
            <a href="#" class="accordion-title">{{reply.by}}: {{reply.content|truncate(14)}}</a>
            <div class="accordion-content" data-tab-content>
                <img src="{{ reply.by.profile.img_url }}" class="thumbnail" width="50" height="50">
                <p>{{ reply.content }}</p>
            </div>
        </li>
{% endfor %}
</ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

测试后我得到以下回溯:

在此处输入图片说明

我究竟做错了什么?

Dan*_*man 7

您根本没有使用 Jinja。您正在使用 Django 模板语言。

Django 的内置过滤器记录在此处;截断字符串的过滤器称为truncatechars。您还需要使用 Django 语法将参数传递给过滤器。

{{reply.content|truncatechars:14}}
Run Code Online (Sandbox Code Playgroud)

  • 您需要更改模板后端 - 请参阅 [the docs](https://docs.djangoproject.com/en/1.11/topics/templates/#support-for-template-engines)。我真的建议不要这样做,除非你有很好的理由;除此之外,正如 Alasdair 指出的那样,模板的其他一些部分已经基于 Django 语法而不是 Jinja。 (2认同)