Django-调用函数不会重定向

时间:2019-11-13 22:25:20

标签: python django redirect

我要在主页上提交表单后重定向并返回视图。不幸的是,POST之后什么也没发生。

我的主页

def home(request):
    if request.method == 'POST':
        url = request.POST['url']
        bokeh(request,url)
    return render(request,'home.html')

def bokeh(request,url):
    //my calculation logic
    return render(request,'bokeh.html')

我当然会发送其他属性,例如字典等,但是当我在浏览器中对URL进行硬编码时,它可以正常工作。在我的主页上的表单上单击“提交”后,没有任何反应。

编辑

我的bokeh功能如下:

def bokeh(request,url):

    source = urllib.request.urlopen(url).read()
    soup = bs.BeautifulSoup(source, 'lxml')
    descrp = [description.text for description in soup.find_all('p', class_="commit-title")]
    author = [author.text for author in soup.find_all('a', class_="commit-author")]
    dict1 = dict(zip(descrp,author))
    dict2 = dict(Counter(dict1.values()))
    label = list(dict2.keys())
    value = list(dict2.values())

    plot = figure(title='Github Effort',x_range=label,y_range=(0,30), plot_width=400, plot_height=400)
    plot.line(label,value,line_width = 2)
    script,div = components(plot)

    return render(request,'bokeh.html',{'script': script,'div': div})

和我的 urls.py

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^bokeh/(?P<url>\w+)/$',views.bokeh,name='bokeh',url='url'),
]

此刻,我遇到TypeError:url()得到了意外的关键字参数'url'

1 个答案:

答案 0 :(得分:3)

您没有返回bokeh函数的结果:

def home(request):
    if request.method == 'POST':
        url = request.POST['url']
        return bokeh(request,url)
    return render(request,'home.html')

但是请注意,这是 not 重定向,因此您 not 不能实现Post/Redirect/Get pattern [wiki]。如果POST请求成功,通常最好执行重定向,以防止用户刷新页面,发出 same POST请求。 POST请求经常有副作用,因此我们要忽略它。

您最好在此处使用redirect(..) function [Django-doc]

from django.shortcuts import redirect

def home(request):
    if request.method == 'POST':
        url = request.POST['url']
        return redirect('bokeh', url=url)
    return render(request,'home.html')

您不应在url=…函数中使用url(..)

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^bokeh/(?P<url>\w+)/$', views.bokeh, name='bokeh'),
]