2012-01-10 2 views
3

내가 사용 실현 . 나는 반환 될지도 모르는 변수를 다루는 것이 가장 좋은지 궁금했다. 다음과 같은보기에서 명시 적으로 설정해야합니까?장고 변수 가장 좋은 방법

... 
some_variable = None 
some_variable = <some business logic> 
return render_to_response('mytemplate.html', { 
     'some_variable' : some_variable, 
     'some_list': some_list, 
}, context_instance=RequestContext(request)) 

결과로보기 코드가 길어질 수 있습니다. 또는 응답에 변수를 포함하기 전에 변수의 존재 여부를 확인해야합니까? 물론

나는 아무것도 할 수없는 경우는 내가 얻을 : 환영

local variable 'some_variable' referenced before assignment 

어떤 제안.

+0

첫 번째 예는 무엇이 문제입니까? – Marcin

+1

@Marcin : 문맥 오염을 야기하는 게으르고, 엉성한 코드입니다. 그것 * 작품 *,하지만 아주 좋은 모범 사례로 간주됩니다. –

+0

@ChrisPratt : 게으르고 엉성한 것은 "나는 그것을 좋아하지 않는다"는 것을 의미합니다. 템플릿에 사용되지 않은 지역 주민이 많은 상황에서 문맥 오염 만 문제입니까? 아니면 문제가 있습니까? – Marcin

답변

2

중간 방법은 컨텍스트 사전 자체를 스택으로 사용하는 것입니다.

context = {} 
if <condition>: 
    context['cond1'] = 'foo' 

if <condition2>: 
    context['cond2'] = 'bar' 

return render_to_response('template.html', context) 

+1

물론 그가 1.3을 사용한다면 클래스 기반 뷰를 사용하는 것이 좋을 것입니다. 클래스 뷰는 대다수의 경우 쓸모없는 두 종류의 렌더링을 의미합니다. ;) –

+0

좋아, 그래서'render (request, template, context)'를 사용 해봤습니다. 예상대로 작동하는 것 같지만,'context' [some_variable ']'과'render' 호출에 변수 사전이 없습니다. 이것은 이전 방법처럼 명확하게 읽을 수 있습니까? –

2

를 (또한 장고 1.3 이후 대신 longwinded context_instance=RequestContext 물건 render(request, template, context)를 사용할 수 있습니다.) 하나, 조건, 즉 당신의 컨텍스트를 구축 :

context = { 'some_list': some_list } 

... 

if <something>: 
    context['some_variable'] = some_variable 

... 

return render_to_response('mytemplate.html', context, context_instance=RequestContext(request)  

또는 사용 재치있는 기본값 :

return render_to_response('mytemplate.html', { 
    'some_variable' : some_variable or 'Default', 
    'some_list': some_list, 
}, context_instance=RequestContext(request)) 
+0

두 번째 방법의 간결함은 조건문 손실과 달리 코드 길이를 크게 늘리지 않으므로 마음에 듭니다. 이 방법의 단점이 있습니까? –

+1

사실 - 이것은 나를 위해 작동하지 않습니다. 'some_variable '을 설정하면 여전히'local variable'some_variable 'assignment before error'가 발생합니다 : some_variable 또는 None,'some_variable ' –