首页 > 解决方案 > Django 视图中的“HTTP 状态代码必须是整数”错误

问题描述

我在我的 Django 网站上有一个小的抓取视图,但我在行中收到错误“HTTP 状态代码必须是整数”:

return HttpResponse(request, 'scrapingscore.html', {'original_link':original_link})
    def scraping(request):
        rootlink = 'https://www.transfermarkt.pl'
        link = 'https://www.transfermarkt.pl/schnellsuche/ergebnis/schnellsuche?query='
        if request.method == 'POST':
            data = request.POST.get("textfield")
            if data == '':
                empty = 'Data is empty'
                return HttpResponse(request, 'scrapingscore.html', {'empty':empty})
            else:
                data = data.replace(" ", "+")
                search = link + data + '&x=0&y=0'
                req = Request(
                        search,
                        data=None,
                        headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
                        }
                    )

                req = urlopen(req).read()
                soup = BeautifulSoup(
                                    req,
                                    features="lxml"
                                    )

                anchor = soup.find("a",{"class":"spielprofil_tooltip"})
                link = anchor.get("href")
                original_link = rootlink + link
                return HttpResponse(request, 'scrapingscore.html', {'original_link':original_link})
        return render(request, 'scraping.html')

我不知道为什么会收到错误消息“HTTP 状态代码必须是整数”。我在这一行的 dict 中有一个参数有错误,我不知道如何修复它,我认为它会起作用,但事实并非如此。当用户输入为空白时,我也收到此错误

return HttpResponse(request, 'scrapingscore.html', {'empty':empty})

. 编辑:我添加了新行:

template = loader.get_template('scrapingscore.html')
context = {
        'original_link': original_link,
    }

现在在这条错误的行中我有:

return HttpResponse(template.render(context, request))

但现在网站没有重定向到“scrapingscore.html”——提交输入后它停留在“scraping.html”上。

抓取.html

<form action="{% url 'scraping' %}" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input name="text" type="text" />
    <input type="submit" value="submit">
</form>

标签: pythondjango

解决方案


您将错误的参数传递给HttpResponse类。阅读如何使用 HttpResponse 类。

从我看到你错误地使用了响应类,它更像是你想使用TemplateResponse类:

return TemplateResponse(request, 'scrapingscore.html', {'original_link':original_link})

因为 HttpResponse 类不使用 template( 'scrapingscore.html') 和 context( {'original_link':original_link})。


推荐阅读