2016-05-13 85 views
0

我在Django有一个加载页面,而一些服务器端进程正在进行视图是;Django重定向

def loading_page(request): 

    testname = request.session['testname'] 

    done_file = filepath_to_design_dir(testname + ".done") 


    if os.path.exists(done_file): 

     request.session["job_stat"] = "job_done"   
     return redirect("single_output/") 


    else: 

     return render(request, 'single_design/loading.html') 

我的问题是重定向进行到;

http://127.0.0.1:8000/single_design/loading_page/single_output/ 

不是

http://127.0.0.1:8000/single_design/single_output 

什么是做到这一点的正确方法???

编辑:问题已解决,谢谢你们。

网址作为请求

from django.conf.urls import url , include 
from . import views 
from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 

    url(r'^$', views.get_single_input, name='single_design_input'), 
    url(r'^single_output/$', views.single_output, name='single_output'), 
    url(r'^loading_page/$', views.loading_page, name='loading_page'), 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
+0

你可以添加你的'urls.py'吗? – AKS

回答

2

没有前导斜线,电流值single_output/被视为相对URL,它是附加到当前URL /single_design/loading_page/,得到/single_design/loading_page/single_output/

您可以使用相对url ../single_output,但我不会推荐它。返回你想要重定向的url会更好,包括一个前导斜杠。

return redirect('/single_design/single_output/') 

理想情况下,您应该使用url模式的名称,然后Django会为您反转。既然你有,

url(r'^single_output/$', views.single_output, name='single_output'), 

,你可以用它代替URL中的名字,

return redirect('single_output') 

使用名称single_output的好处是,你现在可以改变你的URL模式的URL,而不必须更新视图。

3

正确的方法是不使用硬编码链接。使用urlresolvers

return redirect("some_view_name")