django模板中的SafeUnicode长度

时间:2013-08-12 12:11:33

标签: python django

我注意到如果你将一个名为some_copy的变量传递给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并且当您调用{{1}时似乎只返回<type 'int'> }。关于安全过滤器如何与其他过滤器交互,这里有什么奇怪的吗?我知道有些说明建议在安全之后不要使用其他过滤器,因为它们可能会使输出更不安全。此外,此代码产生了一个错误,不再包含对len()的调用,但我很好奇发生了什么。

1 个答案:

答案 0 :(得分: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通过调用lengthSaveData函数的输出转换为mark_safe子类实例。在整数输入的情况下,mark_safe返回SafeString实例。