没有在Django中获取表单的值

时间:2018-06-05 14:35:30

标签: django django-forms django-views

在Django中我想打开一个URL(这是由用户在表单中发布),然后点击带有URL的提交按钮(表单),获取数据(URL)并用它做一些事情(在视图中打印)。

我在views.py文件中只有一个函数,所以我想我的主要问题是我应该有两个函数。但我不确定如何解决它,但是我尝试过。

我的表格就是这个:

<html>
    <head>
        <title>
            Practica Django
        </title>

    </head>

        <form method="POST" action="" id = "loginForm">
               {% csrf_token %}
            <input type="text" name="text" id= "text" value= '{% if submitbutton == "Submit" %} {{ firstname }} {% endif %}' maxlength="100"/>
            <input type="reset" name="Reset" id = "Reset" value="Reset" />
            <input type="Submit" name="Submit" id = "Submit" value="Submit" />

            {% if submitbutton == "Submit"  %}

            <h1 id = 4 name="resultado2"> {{ type }}</h1>
        {% endif %}

        </form>

</html>

在我看来,我有这个:

def vistaFormulario(request,):
    text = request.POST.get('text')
    submitbutton = request.POST.get('Submit')
    m = str(text)
    print(m)
    print(text)

    # Descarga el contenido del HTML
    with urllib.request.urlopen('http://www.elmundo.es/espana/2018/06/05/5b162c3b468aebd9678b4695.html') as response:
        page = response.read()
    soup = BeautifulSoup(page, 'html.parser')
    p = soup.find_all('p')

所以它继续下去。但是我需要打开那个URL!但无论用户在表单中写入并按下输入按钮!

正如您所看到的,我有两个prints,只是为了查看这些值具有的值。在输入内容并按下输入按钮之前,它们没有“无”,按下它后,它们就会显示您所写的内容。

我想要的是在我从开始的按钮中输入的内容中获取此方法。我不明白他们为什么没有。我想获取值,然后打印它们。

1 个答案:

答案 0 :(得分:1)

所以,你的问题是你打电话给Beautiful Soup,但是当用户最初加载页面并且还没有提交表格时你不需要这样做。

最简单的解决方案是将调用bs的逻辑放入if块中,只有在POST时才会触发:

# Define these so that they have a value to be called in the template
text = submitbutton = ''
if request.method == 'POST':
    text = request.POST.get('text')
    submitbutton = request.POST.get('Submit')
    m = str(text)
    print(m)
    print(text)

    # Descarga el contenido del HTML
    with urllib.request.urlopen('http://www.elmundo.es/espana/2018/06/05/5b162c3b468aebd9678b4695.html') as response:
       page = response.read()
   soup = BeautifulSoup(page, 'html.parser')
   p = soup.find_all('p')

# This needs to be outside your 'if' clause, so that the page will render if the method isn't POST
context = {'text': text,
           'submitbutton': submitbutton,
           'type':q1}

return render(request, 'form/form.html', context)

从您的示例中,我不确定qt是如何定义的,或者确切地说是为什么要捕获submitbutton,但这应该或多或少有效。