2012-07-31 5 views
1

나는 웨딩 웹 사이트 제작자를 builing하고있다. (판단하지 말아라).장고 사이트 용 컨텍스트 프로세서

거의 모든보기는 Wedding.objects.get(id=wedding_id)을 호출해야하며 변수의 일부로 템플릿에 전달해야합니다.

이렇게 보이는 것이 사용자 정의 컨텍스트 프로세서에 유용합니다. URL을 읽을 수있는 컨텍스트 프로세서를 만드는 가장 좋은 방법이 무엇인지 궁금해하고 웨딩 ID가있는 경우 템플릿에 웨딩 개체를 포함하십시오. 결혼식 ID가 없으면 템플릿에 wedding = None이 표시됩니다.

+1

는 아직 상황에 맞는 프로세서를 만들려고 있나요? 너는 네가하는 일을 정확히 묘사 한 것처럼 들린다. url을 읽고 쿼리를 반환하는 함수를 만듭니다. – jdi

답변

1

먼저 각 요청에 대해 명시 적 쿼리를 코딩하므로 거의 모든 요청에 ​​대해이 작업이 실제로 필요한지 확인해야합니다. A get 쿼리는 즉각적이며 게으른 filter과 반대입니다. 당신이 더 게으른하고 싶었 경우 게으른 접근을 시도 할 경우에 당신은 ...

def add_wedding_context(request): 
    id_ = request.GET.get('wedding_id', None) 
    wedding = None 
    if id_ is not None: 
     try: 
      wedding = Wedding.objects.get(id=id_) 
     except Wedding.DoesNotExist: 
      pass 
    return {'wedding':wedding} 

을 작은 "get_wedding"래퍼에서 Get 포장, 또는 filter을 사용하고 그냥 목록에서 잡아 수 실제로 객체를 사용하는 경우 쿼리가 실행됩니다 있도록, 당신은 게으른 객체를 포장 할 수 있습니다

from django.utils.functional import SimpleLazyObject 
from functools import partial 

def get_wedd_or_none(id_): 
    try: 
     return Wedding.objects.get(id=id_) 
    except Wedding.DoesNotExist: 
     return None 

def add_wedding_context(request): 
    id_ = request.GET.get('wedding_id', None) 
    if id_ is not None: 
     lazy = SimpleLazyObject(partial(get_wedd_or_none, id_)) 
     return {'wedding': lazy} 
    else: 
     return {'wedding': None} 
+0

지금 웨딩 ID는 GET 변수가 아닌 URL conf의 일부입니다. http://weddingsite.com/wedding_id/photos입니다. 어떻게하면 add_wedding_context를 변경하여 계정을 변경할 수 있습니까? – Brenden

+0

그러면 여기에서 정규 표현식을 사용하여 결혼 ID를 파싱하는 다른 방법을 사용해야합니다. URL 패턴이 변경되면 정규식을 유지해야한다는 점을 기억해야합니다. 솔직히 말하면 컨텍스트 관리자는 뷰에있는 웨딩 아이디로 오류 상태를 처리 할 수 ​​없기 때문에 컨텍스트 관리자에게 적합하지 않습니다. 그들이 허가를받지 못하면 어떡하지? 아니면 존재하지 않습니까? 난 그냥보기에서 필요한 로직을 수행하고 결과를 확인합니다. – jdi

0
import re 

def add_wedding_ring(request): 
    if re.match('.*/id=.*',request.get_full_path()): 
    return {'wid':Wedding.objects.get(id=wedding_id)} 
    return {} 
0

@Brenden 왜 상황에 맞는 프로세서를? 당신이 Django>=1.3를 사용하는 경우에 당신은 그냥 가치 대신에 나는 그것보다 유연하고 바람직한 방법은 context_processor 생각하는 방식에 의해보기에서 wedding 인스턴스를 전달하는 또 하나의 상황에 맞는 프로세서를 가지고 있습니까

class ViewWedding(DetailView): 
    model = Wedding 
    pk_url_kwarg = 'wedding_id' 
    template_name = 'you-template.html' 
    context_object_name = 'wedding' 

같은 클래스 기반의 뷰를 사용할 수 있습니다 ?

감사합니다,

술탄

관련 문제