2013-08-12 2 views
0

내가 발견 당신은 장고 템플릿에 유니 코드 문자열을 포함 some_copy라는 변수 전달하는 경우 : 그래서,을 나는 길이 필터는 단지 입력에 len()를 호출 것으로 나타났습니다길이는

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'> 

을 테스트를 통해 django.utils.safestring.SafeUnicode을 가져 오면 len()으로 전화하면 <type 'int'>을 반환하는 것 같습니다. 안전 필터가 다른 필터와 상호 작용하는 방식에 대해 이상한 점이 있습니까? 필자는 다른 필터를 사용하지 말 것을 제안하는 노트가 있다는 것을 알고 있습니다. 출력을 덜 안전하게 할 수 있기 때문입니다. 또한이 코드는 버그를 생성하고 더 이상 safe|length에 대한 호출을 포함하지 않지만 계속 진행되고 있었는지 궁금했습니다. 소스 코드에서

답변

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)mark_safe를 호출하여 SaveData 서브 클래스의 인스턴스에 length 함수의 출력을 변환하는 장고를 알려줍니다. 정수 입력의 경우 mark_safeSafeString 인스턴스를 반환합니다.