0

Unicode 文字列を含む 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<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 に指示します。整数入力の場合、インスタンスを返します。lengthSaveDatamark_safemark_safeSafeString

于 2013-08-12T12:41:29.990 に答える