2013-09-03 2 views
0

하나의 inclusion_tag를 공유하는 두 개의 URL이 있습니다. 포함 태그 안에 양식을 표시하는 다른 URL이 있고이 양식은 두 개의 URL 중 하나로 리디렉션됩니다. 어떻게이 리디렉션을 동적으로 만들 수 있습니까? 예. 양식이 url_1의 url_1로 리디렉션되어 있고 url_2에있는 경우 url_2로 리디렉션됩니까? 여기 Django를 사용하여 동적 HttpResponseRedirect를 만드는 방법은 무엇입니까?

는 (희망) 더 나은 설명 내 코드입니다 :

form.html

# This form lives inside of an inclusion tag, so many urls could display it 
<form method="POST" action={% url cv_toggle %}> 
    <input type="hidden" name="c_id" value={{ c.id }}> 
    ... 
    {% csrf_token %} 
</form> 

views.py

# corresponds to name="cv_toggle" as a url 
def toggle_vote(request): 
    ... 
    next = reverse("frontpage") # this url should redirect to the current 
           # url requested, and not just "frontpage" 
    return HttpResponseRedirect(next) 
+0

및 요청한 현재 URL을 결정하는 요인은 무엇입니까? 그것은 포스트의'행동'부분인가? – karthikr

+0

예, 작업은 게시물의 일부이므로 URL 이름을 사용하고 있기 때문에'HttpResponseRedirect (request.path_info) '가'.../toggle_vote /' – Pompeyo

+0

으로 리디렉션되기 때문에 반환 할 수 없습니다. 'reverse ('cv_toggle') 만하지 말고? – karthikr

답변

1

당신은 현재의 URL을 확인하기 위해 요청 객체를 사용할 수 있습니다 이렇게 :

<form method="POST" action="..."> 
    <input type="hidden" name="next" value="{{ request.get_full_path }}"> 
    ... 
    {% csrf_token %} 
</form> 

보기 :

from django.utils.http import is_safe_url 

def toggle_vote(request): 
    ... 
    next_url = request.POST.get('next') 

    if not next_url or not is_safe_url(url=next_url, host=request.get_host()): 
     next_url = reverse('frontpage') 
    return HttpResponseRedirect(next_url) 

장고 로그인 양식 어디에서 로그인 한 후 사용자를 리디렉션하는 확인하는 등 next 필드를 사용하는 대신 POST의 GET 매개 변수로이 URL을 저장할 수 있습니다 또는 당신은 더 나은 유연성과 쉽게 모두를 사용할 수 있습니다. 테스트.

+0

감사합니다. 나는 그것을 조사 할 것입니다! – Pompeyo

+0

어떤 이유로 is_safe_url을 가져 오는 데 문제가 있습니다. 분명히 내가 사용하고있는 장고 버전에 문제가 있습니다. 그 문제를 해결하는 방법을 확인 중입니다 ... – Pompeyo

+0

inclusion_tag 내부에 양식이 있거나 작동하지 않습니다. – Pompeyo

관련 문제