#python #django
#python #django
Вопрос:
Это мой views.py досье. я нахожусь на пути к созданию XML-файла, данных, которые я получаю от mysql. В первый раз он работает, но я вношу некоторые изменения, после чего не могу вспомнить, что я сделал, теперь он не работает…
в views.py
def MessageHeaderModel2(request):
if request.method == "POST":
form = MessageHeaderForm(request.POST)
if form.is_valid():
DDEX_Party_Id = request.POST.get('DDEX_Party_Id',None)
data = serializers.serialize("xml", MessageHeaderModel2.objects.all())
with open("file.xml", "w") as out:
xml_serializer.serialize(MessageHeaderModel2.obj ects.all(), stream=out)
Ошибка, которую я получаю, такова
>Exception Type:ValueError
Exception Value:The view app.views.MessageHeaderModel2 didn't return an HttpResponse object.
Ответ №1:
Как указано в ошибке, ваше представление не отправляет никакого ответа клиенту.
Добавьте в конце вашего представления строку типа :
return render(request, 'template.html')
Или любой другой ответ, который вам нужен
Комментарии:
1. должен ли я предоставить return render (запрос,’file.xml ‘)..?
Ответ №2:
На самом деле вы не возвращаете HttpResponse
объект!
Представления Django должны возвращать экземпляр HttpResponse
so в конце вашего представления:
from django.http import HttpResponse
def view(request):
...
return HttpResponse("the page content")
Вы также можете вернуть другие подклассы HttpResponse
, список см. В документации.
Вы также можете использовать некоторые функции быстрого доступа для отображения страницы с использованием системы шаблонов django, опять же, документация здесь полезна, но кратко:
from django.shortcuts import render_to_response
def view(request):
...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Полный пример с использованием вашего кода из приведенного выше:
def view(request):
if request.method == "POST":
form = MessageHeaderForm(request.POST)
if form.is_valid():
DDEX_Party_Id = request.POST.get('DDEX_Party_Id',None)
data = serializers.serialize("xml", MessageHeaderModel2.objects.all())
with open("file.xml", "w") as out:
out.write(data)
return HttpResponse(data)
else:
# return error response?
return HttpResponseNotAllowed(['POST'])
Комментарии:
1. я дал как return HttpResponse(«file.xml «) .. Тогда также не работает та же ошибка
2. Вы должны возвращать
HttpResponse
по всем путям кода. Я предполагаю, что вы возвращаете его только тогда, когдаrequest.method == "POST"
? Если страница предназначена только для приема запросов POST, вы можетеreturn HttpResponseNotAllowed(['POST'])
после вашегоif
блока.3. Если вы хотите вернуть содержимое вашего сгенерированного XML, то вы вообще не хотите сохранять его в файл.
4. Вы хотите сохранить его, а также вернуть в браузер?
5. Смотрите мое редактирование, но я, с какой стати вы хотите это сделать?
Ответ №3:
Вы ничего не возвращаете, поэтому у вас такая ошибка…
Вы также можете, например, вернуть значение успеха или перенаправить на другое представление..