0

我注意到,如果你将一个名为 some_copy 的包含 unicode 字符串的变量传递给 Django 模板:

some_copy <type 'unicode'>
some_copy|length <type 'int'> 
some_copy|safe <class 'django.utils.safestring.SafeUnicode'>
some_copy|safe|length <class 'django.utils.safestring.SafeString'>  

我注意到长度过滤器只是len()在输入上调用,所以django.utils.safestring.SafeUnicode在终端上测试了导入,它似乎只是<type 'int'>在你调用时返回len()。关于安全过滤器如何与其他过滤器交互,这里有什么奇怪的吗?我知道有注释建议不要在安全后使用其他过滤器,因为它们可能会使输出不那么安全。此外,这段代码产生了一个错误,不再包含对 的调用safe|length,但我很好奇发生了什么。

4

1 回答 1

0

从源代码:

@register.filter(is_safe=True)
def length(value):
    """Returns the length of the value - useful for lists."""
    try:
        return len(value)
    except (ValueError, TypeError):
        return ''

@register.filter(is_safe=True)告诉 Django 通过调用将length函数的输出转换为SaveData子类实例mark_safe。在整数输入的情况下,mark_safe返回一个SafeString实例。

于 2013-08-12T12:41:29.990 回答