2011-09-28 2 views
25

나는 django 설정이나 프로그래밍 방식으로 모든 장고 템플릿 태그를 값이 None 일 때 빈 문자열로 표시하도록합니다.Django는 변수가 None 일 때 기본 템플릿 태그 출력을 설정합니까?

{{cat}} chases {{mouse}} 

으로 고양이와 마우스 모두 없음, 그것은 렌더링하지 않습니다 경우 : 내가 {{cat|default:""}} 또는를 사용하여 각 하나를 설정할 수 있습니다 알고

None chases None 

예를 들어, 내가 어떤 장고 템플릿을 상상 {{mouse|default_if_none:""}}

그러나 모든 태그에 명시 적으로 |default:""을 추가하지 않고 모든 태그의 기본값을 설정할 수있는 설정을 찾고 있습니다.

TEMPLATE_STRING_IF_INVALID이라는 설정도 알고 있습니다. 그러나이 설정은 잘못된 문자열에만 적용됩니다. 아무 것도 유효한 것으로 간주되지 않습니다.

답변

34

그런 것은 존재하지 않습니다. 그렇기 때문에 defaultdefault_if_none 필터가 존재합니다. 이것은 기능입니다. 오해의 소지가있는 행동에 의존하는 대신 자신이하고있는 일에 대해 생각하게 만듭니다. 변수가 None 일 가능성이있는 경우 해당 우발 사태에 대비해야합니다. 변수의 값이 항상 인 경우 값이면 "없음"이 올바르지 않음을 나타냅니다. 기본값이 빈 문자열을 렌더링하는 것이라면 값이 정의되지 않았는지 또는 실제로는 빈 문자열인지 알 수 없습니다. 일관된 코드를 작성하고 바로 가기를 잊어 버리십시오.

+4

+1 "Explicit is implicit"보다 우수합니다. – jathanism

+0

그건 의미가있어, 고마워! – zzz

+0

절름발이. "허가보다 용서를 구하는 것이 더 쉬워 진 것"은 어떻게 되었습니까? 나는 이것이 매우 Pythonic하지 않고 DRY에 뒤 따르지 않고 모든 곳에서'default_if_none'을 쓰는 것이 아닌가 걱정된다. 이 "기능"을 우회하려면,'forms.fields.CharField'는 절대로 반환하지 않습니다. 빈 문자열을 저장하는 것이 더 낫습니다. DB ... 예, 확실합니다. 자랑 스럽습니다. 나 자신을 도울 수 없었습니다. –

4

당신은 당신이 마법 "널 (null) 문자열과 같은 거짓 값으로 모든 것을 렌더링"을 활성화했다고 잊었 때문에 일을 제대로 렌더링하지 않을 경우이 얼마나 분노의

생각해 "노골적인 암시보다 낫다" 환경.

default_if_none 필터를 많이 사용하는 경우 템플릿으로 전달하기 전에 None에서 ''으로 캐스팅을 변경하는 것이 좋습니다.

템플릿이 더 간단 해지고 이 명시 적으로이 null 값을 문자열 화하기로 결정하게됩니다.

3

예를 들어, 초기화 코드의 어딘가에 넣어야합니다. wsgi.py

# Patch template Variable to output empty string for None values 
from django.template.base import Variable 
_resolve_lookup = Variable._resolve_lookup 
def new_resolve_lookup(self, *args, **kwargs): 
    o = _resolve_lookup(self, *args, **kwargs) 
    return o or u"" 
Variable._resolve_lookup = new_resolve_lookup 
관련 문제