2014-12-07 4 views
1

그래서 문제는 아주 간단합니다. 최종 사용자가 양식을 채우고 제출을 누르십시오. 페이지를 다시로드 (성공한 경우)합니다. 문제는 양식이 정적 URL이 아닌 각 사용자 프로필 페이지에 있다는 것입니다. 그래서 나는 할 수 없다 :views.py에서 현재 페이지를 렌더링하는 방법은 무엇입니까?

return HttpResponseRedirect('/accounts/{{ username }}') 

이 예제에서는 변수를 전달할 수 없다는 것을 알고 있지만 다른 방법은 잘 모르겠다. 제가 여기서하려고하는 것을 성취 할 다른 방법이 있습니까? 현재 페이지를 새로 고치는 방법이 있습니까? 지금 아약스 솔루션을 찾고있는 중이 아니며 양식을 제출할 때 현재 페이지를 다시로드하려고합니다.

답변

4

POST 요청 인 경우 동일한 페이지를 다시로드하면 안됩니다. 항상 리디렉션해야합니다 (PRG 참조). 따라서 성공적인 제출시 동일한보기로 리디렉션하려는 경우를 가정합니다.

당신은 현재 request.user로 로그인 한 사용자 얻을 수 있기 때문에이 같은 시도 할 수 있습니다 :

: 당신이 당신의 계정 URL 패턴라는 이름의 경우

from django.shortcuts import render, redirect 

def some_view(request): 
    form = SomeForm(request.POST or None) 
    if form.is_valid(): 
    # do something 
    return redirect('/accounts/{}'.format(request.user)) 
    return render(request, 'form.html', {'form': form}) 

그러나, 그것은 더 나은 것을

url('/accounts/(?P<username>\w+)/$', 'some.view', name='user-home') 

지금, 당신은이 작업을 수행 할 수 있습니다

def some_view(request): 
    form = SomeForm(request.POST or None) 
    if form.is_valid(): 
     # do something 
     return redirect('user-home', username=request.user) 
    return render(request, 'form.html', {'form': form}) 
+0

멋진 대답을. 고맙습니다. – stephan

관련 문제