【问题标题】:Django: request.POST.get from form data not working correctlyDjango:来自表单数据的 request.POST.get 无法正常工作
【发布时间】:2020-08-11 11:14:41
【问题描述】:

我一直在尝试提出解决方案,并且已经在网上搜索了几个小时。希望大家能帮我找出代码中的问题!

我正在尝试在 Django 中实现一个表单,一个简单的文本字段。一旦用户在字段中提交文本数据,我希望它发布数据,并且我想要下一个视图来检索该数据并将其打印在屏幕上。详细说明:我希望用户在home.html页面的表单中输入一些文本然后提交,然后用户输入的内容会打印在下一页predict.html上(当然我打算把inpur改成之间,但首先我希望文本至少打印在第二页上)。

这是我的代码:

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .forms import NameForm
from django.template import RequestContext

def index(request):
    return render(request, 'personal/home.html')

def predicted(request):
    predicted = request.POST.get('data')
    return render(request, 'personal/predicted.html', {"predicted": predicted})

def get_name(request):
    if request.method == 'POST':
        if form.is_valid():
            return predicted(request)
    else:
        form = NameForm()
    return render(request, 'home.html', {'form': form})

forms.py

from django import forms

class NameForm(forms.Form):
    data = forms.CharField(label='Your text:', max_length=100)

home.html

{% extends "personal/header.html" %}
{% block content %}
<p>Please input your text:</p>
<br>
<form action="/predicted/" method="POST">
    {% csrf_token %}
    <label for="data">Your text: </label>
    <input id="data" type="text" name="data">
    <input type="submit" value="Submit!">
</form>
{% endblock %}

predicted.html

{% extends "personal/header.html" %}
{% block content %}
<p><a>Your predicted text:
<br>
    {{ predicted }} </a></p>

{% endblock %}

我猜错误出在predicted = request.POST.get('data') 行的某处,与我写错的其他行相结合...除此之外,其他一切似乎都正常。我想保留方法 POST(而不是 GET),因为输入表单中的数据可能会变得非常大,这将导致 predict.html 的 URL 非常庞大。

非常感谢您的帮助!!

【问题讨论】:

  • 您将其作为predicted 传递给模板,而不是xdata
  • 抱歉!我正在“调试”并忘记删除...即使使用 {{ predicted }} 输出是空的,所以这不是这里的主要问题...但是感谢您的突出显示,我进行了编辑。
  • 您的代码当前在访问预测页面时是否抛出任何错误?
  • 不,一切正常,但是 {{ predicted }} 应该是空的,所以没有变量被接管。
  • 而不是这个return render_to_response('personal/predcited.html', RequestContext(request)),你为什么不直接使用return predicted(request)

标签: django python-3.x forms post


【解决方案1】:

我终于想出了一个可行的解决方案。我不知道这是否是最漂亮的解决方案,但我很高兴它有效。我的代码中的所有内容都是正确的,除了 views.py 文件。我在查询 POST 数据时犯了一个错误。 POST 中的数据存储在 QueryDict 中。我没有意识到这一点,并使用了错误的函数来查询数据。我将预测函数中的代码更改为:

QueryDict = request.POST 
predicted = QueryDict.get("data")

现在它突然工作并在下一个 html 页面上显示数据。 这是我在 views.py 文件中的完整代码:

from django.shortcuts import render
from django.http import HttpResponse
from django.http import HttpRequest
from .forms import NameForm
from django.template import RequestContext

def index(request):
    return render(request, 'personal/home.html')

def about(request):
    return render(request, 'personal/about.html')

def predicted(request):
    QueryDict = request.POST
    predicted = QueryDict.get("data")
    return render(request, 'personal/predicted.html', {"predicted": predicted})

def get_name(request):  
    if request.method == 'POST':
        if form.is_valid():
            return predicted(request)
    else:
        form = NameForm()
    return render(request, 'home.html', {'form': form})

感谢 cmets 中的每个人的提示。如果有人知道我的错误的更详细解释,我很想听听!

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2023-03-07
    • 2021-01-21
    相关资源
    最近更新 更多