Django: request.POST.get из данных формы работает неправильно - PullRequest
0 голосов
/ 27 апреля 2020

Я пытался найти решение и часами искал в Интернете. Я надеюсь, что вы, ребята, можете помочь мне найти проблему в моем коде!

Я пытаюсь реализовать форму в Django, простом текстовом поле. Как только пользователь отправит текстовые данные в поле, я хочу, чтобы он отправил данные, и я хочу, чтобы следующий просмотр извлек эти данные и распечатал их на экране. Подробно: я хочу, чтобы пользователь ввел некоторый текст в форму на странице home. html, а затем отправил его, а затем пользовательский ввод будет напечатан на следующей странице предсказать. 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 %}

предсказано . html

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

{% endblock %}

Полагаю, ошибка лежит где-то в строке predicted = request.POST.get('data') в сочетании с какой-то другой строкой, которую я написал неправильно ... За исключением этого, все остальное работает нормально , Я хотел бы сохранить метод POST (не GET), так как данные в форме ввода могут стать довольно большими, и это приведет к огромному URL для предиката. html.

Большое вам спасибо за заранее за вашу помощь !!

1 Ответ

0 голосов
/ 28 апреля 2020

Мне наконец-то удалось найти решение, которое работает. Я не знаю, если это самое красивое решение, но я рад, что оно работает. Все в моем коде было правильно, за исключением файла 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})

Спасибо всем в комментариях за советы. Если кто-нибудь знает более подробное объяснение моей ошибки, я хотел бы услышать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...