2013-09-03 3 views
0

У меня есть два URL-адреса, которые делят один include_tag, внутри тега включения у меня есть другой URL-адрес, который отображает форму, и эта форма перенаправляется на один из двух URL-адресов. Как я могу сделать это перенаправление динамическим? . Если форма находится в URL-адресе url_1, перенаправляется на url_1, и если он перенаправлен url_2 на url_2?Как создать динамический HttpResponseRedirect с помощью Django?

Вот мой код для лучшего объяснения (надеюсь):

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

и что определяет текущий запрос? Это часть действия? – karthikr

+0

Да, действие является частью сообщения, поэтому я не могу использовать return 'HttpResponseRedirect (request.path_info)', потому что это будет перенаправлено на '.../toggle_vote /' – Pompeyo

+0

, поскольку вы используете имена URL-адресов, можете ли вы а не просто '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 поле, чтобы определить, куда перенаправить пользователя после входа в систему Вы можете сохранить этот URL также в качестве параметра GET вместо POST или Вы можете использовать как для большей гибкости и легче. тестирование.

+0

Спасибо, я проверю! – Pompeyo

+0

по какой-то причине у меня возникают проблемы с попыткой импортировать is_safe_url, видимо, что-то не так с версией django, которую я использую. Я проверяю, как решить эту проблему ... – Pompeyo

+0

Это не работает, имея форму внутри include_tag или я что-то упускаю? – Pompeyo

Смежные вопросы