문제

나는 '현지인'이주는 것과 매우 유사한 사전을 사용하고 싶은이 상황에서 계속해서 끝나지만 함수의 제한된 범위에 변수 만 포함되어 있습니다. 파이썬에서 이것을 할 수있는 방법이 있습니까?

내가 왜 이것을하고 싶은지에 대한 조금 더 : 나는 django와 함께 놀고 있고 템플릿 컨텍스트를 주려고 할 때, 수동으로 사전을 만들거나 (건조 원칙을 위반) 로컬을 통과해야합니다 () 훨씬 더 많은 항목이 포함되어 있어야합니다 (폐기물). Python 레벨 솔루션의 필요성을 완화시킬 Django와 함께 놓친 것이 있습니까?

명확히하기 위해 :

그래서, 내가 반복적으로 타격을받은 경우는 다음과 같습니다.

@render_to('my_template.html') 
def myview(request): 
    var1 = #blahblah 
    var2 = #... 
    # do stuff with vars 
    return {'var1': val1,'var2':val2} 

따라서 이러한 변수와 이름 지정 규칙을 반복하는 대신 다음을 수행 할 것입니다.

@render_to('my_template.html') 
def myview(request): 
    var1 = #blahblah 
    var2 = #... 
    # do stuff with vars 
    return locals() 

더 깨끗한 것을 발견하지만 Locals ()에 약 30 개의 항목이 더 있기 때문에 나는 그 종류의 조잡한 것을 알고 있습니다. 그런 다음 실제로 필요합니다.

도움이 되었습니까?

해결책

사전을 만드는 것은 건조를 위반한다는 데 동의하지 않지만, 실제로 아무것도 반복하고 싶지 않다면보기 상단에서 '컨텍스트'사전을 정의하고 사전 키를 사용할 수 있습니다. 보기 전체에 걸쳐 변수 대신.

def my_view(request):
    context = {}
    context['items'] = Item.objects.all()
    context['anothervalue'] = context['items'][2].name
    return render_to_response('template.html', context)

다른 팁

사전을 전달하는 것은 어떻게 건조를 위반합니까? 장고는 마른에 관한 것입니다, 그래서 나는 그것의 표준 행동이 직접 위반할 것이라고 의심합니다. 그러나 두 경우 모두 수정 된 버전을 사용합니다. 장고 아노 잉 모든 것을 더 쉽게하기 위해 :

@render_to('my_template.html')
def myview(request):
    # figure stuff out...
    return {'var1':'val1','var2','val2'}

그만큼 render_to 데코레이터는 요청 컨텍스트와 모든 좋은 것들을 처리합니다. 잘 작동합니다.

이것이 도움이되지 않으면 질문을 다시 제출하는 것이 좋습니다. 당신이 엉망으로하고 싶은 것이 무엇이든 locals() 그리고 Django와의 이런 종류의 상황에서는 거의 필요하지 않습니다.

"폐기물"이기 때문에 현지인 ()을 사용하는 것을 좋아하지 않는다고 말합니다. 무엇을 낭비합니까? 나는 그것이 반환 된 사전이 이미 존재한다고 생각합니다. 그것은 단지 당신에게 그것에 대한 참조를 제공하고 있습니다. 사전을 만들어야하더라도 파이썬에서 가장 최적화 된 작업 중 하나이므로 걱정하지 마십시오.

오류의 가능성이 가장 적은 의도를 가장 잘 표현하는 코드 구조에 집중해야합니다. 당신이 걱정하는 폐기물은 걱정할 것이 없습니다.

나는 다른 많은 응답자들과 동의하는 동안 locals() 또는 완전히 지정된 DITT {'var1':var1, 'var2': var2} 구체적으로 다음과 같은 DICT를 "서브 세트"하려면 locals() 그것은 어렵지 않습니다. 예를 들어 :

loc = locals()
return dict((k,loc[k]) for k in 'var1 var2'.split())
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top