2017-10-18 26 views
1

我有一個網站www.example.com與許多頁面。Django編程 - 如何重定向到原始網址

在每個頁面上我放了一個特殊的獨特按鈕,鏈接到唯一的URL www.example.com/task1

一旦點擊此按鈕,Django的URL模式將會把它傳遞給我的專用函數task1

我的問題是如何將TASK1完成後刷新原來的URL,我發現Request的只能轉移/TASK1。任何想法找回按鈕分配的URL。請參閱我的task1功能。

def task1(request): 
    ''' 
    do task1 job 
    ''' 
    return render(request, request.path) 
    # above return could not render the original URL which I clicked from. 

回答

4

在鏈接到您的TASK1功能,包括當前的URL作爲查詢字符串:

<a href="task1/?next={{ request.get_full_path }}">Task 1</a> 

然後在視圖:

from django.shortcuts import redirect 

def task1(request): 
    # Do task 1... 
    next = request.GET.get('next') 
    if next: 
     return redirect(next) 
    # some fallback here… 

爲了完整,並基於@Alasdair的評論,你可以模仿Django確保重定向URL是安全的:

from django.conf import settings 
from django.shortcuts import redirect 
from django.utils.http import is_safe_url 


def task1(request): 
    # Do task 1... 
    pass 

    # Return the user-originating redirect URL if it's safe. 
    redirect_to = request.GET.get('next') 
    url_is_safe = is_safe_url(
     url=redirect_to, 
     allowed_hosts=settings.ALLOWED_HOSTS, 
     require_https=request.is_secure(), 
    ) 
    if url_is_safe and redirect_to: 
     return redirect(redirect_to) 
    return redirect('http://www.example.com') 

對於原始的看https://github.com/django/django/blob/master/django/contrib/auth/views.py#L68,雖然這是一個基於類的視圖,而不是一個基於函數的視圖,你在這裏。

+1

從GET參數信任一個url並重定向到它是不安全的。它可能會導致您的用戶被重定向到惡意域名。例如,如果你看Django的登錄視圖,它使用'is_safe_url'。 – Alasdair

+1

謝謝@Alasdair。我已經用一個選項來更新它來模仿它。 – nimasmi

+0

謝謝大家,我試過完全成功。 –

相關問題