2013-02-08 5 views
0

장고 1.4를 사용하고 있습니다. 나는 꽤 오랫동안 googleing을 보냈고 django 페이지 인 https://docs.djangoproject.com/en/1.4/ref/contrib/formtools/form-wizard/ 등에서 문서를보고있었습니다. 몇 명의 사람들이 질문을 던졌고 아무도 대답하지 않았습니다.Django에서 formwizard를 사용하는 경우 어떻게 URL 매개 변수에 액세스하여 사용합니까?

내가해야 할 것은 : (다음과 같이)

는 urls.py에서 슬러그 paramater를 사용

FORMS=[...] 
url(r'^url/(?P<slug>[\w-]+)/form/$', WizardWizard.as_view(FORMS)), 

을 views.py에 (다음과 같이) :

class WizardWizard(SessionWizardView): 
    template_name = "template.html" 

    extra_context = Model.objects.filter(slug=slug) # HERE! 

    def done(self, form_list, **kwargs): 
     ... 
+0

발견 : http://stackoverflow.com/questions/1947040/django-formwizard-and-view. 하지만 그것은 나를 위해 작동하지 않습니다 : ( –

답변

1

며칠 동안 붙어서 대답하면 상당히 간단합니다. 이 글을 읽는다면 먼저 클래스 기반 제네릭 뷰를 사용하고 있는지 아니면 다른 문제인지 확인하십시오. 그은을 설정 https://docs.djangoproject.com/en/1.4/ref/contrib/formtools/form-wizard/#django.contrib.formtools.wizard.views.WizardView.get_context_data

예제 코드 (그들의 약간 다른 일) :

당신은 이것이 당신이 (안 extra_context var에로) 추가 컨텍스트를 지정하는 방법입니다 분명하지 않다 다음 링크에서 관련 정보를 찾을 수 있습니다 당신은 당신이 SessionWizardView (또는 CookieWizardView)로 만들어 놓은 서브 클래스에서이 코드를 삽입 할 필요가

def get_context_data(self, form, **kwargs): 
    context = super(PaperworkWizard, self).get_context_data(form=form, **kwargs) 

    #this line makes camp available as a var in the template context. 
    #it sets it to an OBJECT RETRIEVED USING THE SLUG FROM THE URL. 
    context.update({'camp': Camp.objects.get(slug=self.kwargs.get("slug"))}) 
    return context 

: 당신의 모든에 대한 상황 var에 페이지를 formwizard. 질문의 맥락에서 Views.py 파일의 WizardWizard 클래스.

다른 방법으로 문제가 발생하면 디스패치 기능이 실행될 때 self.args 및 self.kwargs가 설정됩니다. 참고 : extra_context 변수를 설정하여 컨텍스트를 설정할 수 없습니다. 여기가 넘어졌습니다.

freenode의 #django 채널에서 nkryptic에 대한 크레디트. 당신이이 대답 후에 아직도 붙어 있다면 그것은 향하기에 환상적인 곳입니다. 나는 모두에게 행운을 기원합니다.

1

이 문제도 해결되었습니다. 인스턴스 self.args과 인수 및 URLconf에서 볼 전달 kwargs로 설정된다 self.kwargs 포함 FormWizard. django.views.generic.base.dispatch

+0

나는 dispatch 메서드를 재정의하려고 노력했지만 django 1.4에서 올바른 방법이 아닙니다. (어려운 방법을 발견 한 것처럼 내 대답의 링크 참조) :) –

+0

예, 링크를 보았습니다. 나는 여러 곳에서 하나의 var가 필요했기 때문에 파견을 무효로했다. ** 발송 **의 ** args ** 및 ** kwargs **를 사용했습니다. 모두 확인 :) –