2012-01-14 2 views
0

Python 2.7, Django 1.3.1을 사용 중입니다.장고가 바운드 형식으로 다른보기로 리디렉션

임의의 페이지에서 호출 할 수 있고 코드 중복없이 동일한 페이지로 리디렉션되는 로그인 기능을 구현하려고합니다. 현재 가지고있는 현재의 방법은 두 개의보기가 있습니다. 하나는 홈페이지 용이고 다른 하나는 로그인 용입니다. sign_in보기에서 양식 ()으로 가정보기로 리디렉션 할 수 있기를 원합니다. 주요 문제는 사용자가 잘못된 데이터 (예 : 잘못된 비밀번호)를 입력하면 같은 페이지로 리디렉션하고 싶지만 원래 양식의 컨텍스트를 보내려고한다는 것입니다. 명시 적으로 view 함수를 호출하지 않고이 작업을 수행 할 수 있기를 원합니다. 임의의 페이지에서 수행 할 수 있기를 원하기 때문입니다. 어떻게해야합니까? 내 현재 시도 데이터가 유효하지 않은 경우 언 바운드 폼을 항상 반환합니다.

나의 현재 코드 (simplfied)된다

urls.py

urlpatterns = patterns('myapp.views', 
    url(r'^$', 'index', name='home'), 
    url(r'sign_in/^$', 'signin', name='sign_in') 
) 

views.py

def index(request, loginForm=LoginForm) 
    extra_context = dict() 
    extra_context['login_form'] = loginForm 
    return direct_to_template(request, 'home.html', extra_context=extra_context) 

def signin(request) 
    if request.method == 'POST': 
     login_form = LoginForm(request.POST, request.FILES) 
     if login_form.is_valid(): 
      # login user 
     redirect_view = reverse('home') 
     return redirect(redirect_view, kwargs={'loginForm': login_form}) 
     # I also tried: 
     # return redirect(redirect_view, loginForm=login_form) 
     # what works is: 
     # return index(request, loginForm = login_form) 

home.html

<form action="{% url sign_in %}" method="post"> 
    {{ form.as_p }} 
</form> 

답변

2

반대가 아닙니다. 역방향으로 경로/my-homepage/

django 패러다임은 숨겨진 "다음"변수를 초기 페이지에 사용하는 것입니다.

#In your template 
<input type="hidden" value="{{ request.path }}" name="next" /> 

그런 다음, 성공 HttpResponseRedirect를 다음으로 돌아 : 문제가있는 경우, 당신은/계정/로그인/페이지와에 오류가있는 폼을 표시하기 때문, 내구성

 if login_form.is_valid(): 
     # login user 
     return HttpResponseRedirect(form.cleaned_data['next']) 

숨겨진 다음 변수와 사용자는 여전히 그들이 있던 곳으로 돌아갑니다.

+0

성공하면 단순히 신호 페이지로 리디렉션됩니다. login_form이 유효하지 않을 때 걱정됩니다. 원본 페이지에 해당하는보기로 리디렉션하고 싶습니다 (예, 'next'매개 변수를 통해 얻을 수있는 링크). 오류를 나타내는 바운드 폼이 있습니다. – saurabh

+0

그건 귀엽지 만 재앙 일 수도 있습니다. 오류가있는 경우 오류 수정에 초점을 맞춘 단일 페이지에서 사용자를 원하십니까? – Ted

+0

예. 이것이 가능한 하나의 해결책이지만 사용자가 다른 것처럼 보이는 페이지로 리디렉션되는 단점이 있습니다. 실패한 리디렉션이 동일한 페이지에서 수행 될 수 있는지 알고 싶습니다. 대답이 안된 것 같니? – saurabh

관련 문제