Django-HttpResponse возвращает None
Я получаю ошибку при запуске моего проекта:
ValueError: The view ... didn't return an HttpResponse object. It returned None instead.
Я видел другие подобные вопросы, но их ответы, похоже, не работают. В других моих проектах тот же код работал.
Я искал в сети несколько дней, но мне не повезло.
views.py -
from .models import create_message
from .forms import MessageForm
from django.http import HttpResponseRedirect
def create_message(request):
submitted = False
if request.method == "POST":
form = MessageForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/create_message?submitted=True')
else:
form = MessageForm
if 'submitted' in request.GET:
submitted = True
return render(request, 'send/create_message.html', {'form': form, 'submitted': submitted})
forms.py -
from django.forms import ModelForm
from .models import create_message
class MessageForm(ModelForm):
class Meta:
model = create_message
fields = ('message', 'app_name', 'time')
labels = {
'message': 'Message',
'app_name': 'App',
'time': 'Time',
}
widgets = {
'message': forms.TextInput(attrs={'class':'form-control', 'placeholder': 'Message'}),
'app_name': forms.Select(attrs={'class':'form-select', 'placeholder': 'App'}),
'time': forms.TextInput(attrs={'class':'form-control', 'placeholder': 'Hours : Minutes : Seconds / Hours : Minutes : 00(ZERO ZERO)'}),
}
models.py -
from django.db import models
class create_message(models.Model):
message = models.TextField(blank=False, null=False)
time = models.TimeField(blank=False, null=False)
def __str__(self):
return self.time
create_message.html
{% extends 'send/base.html' %}
{% block content %}
{% if submitted %}
Submitted
{% else %}
<form action="" method=POST>
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" class="btn btn-secondary">
</form>
{% endif %}
{% endblock %}
Я только начинаю, поэтому может быть несколько ошибок... Заранее спасибо за любую помощь :)
Небольшое уточнение: вы пытаетесь сделать GET запрос или POST запрос, когда получаете эту ошибку?
Похоже, что функция create_message
обрабатывает только POST-запросы и не возвращает ответ для GET-запросов
В зависимости от вашего предполагаемого поведения вы можете рассмотреть возможность разгруппировки этого утверждения:
return render(request, 'send/create_message.html', {'form': form, 'submitted': submitted})
или добавление еще одной ветви верхнего уровня else if
для обработки случая запроса GET
Вы можете посмотреть этот вопрос для соответствующего примера