Как мне решить эту ошибку Django HttpResponse?
Моя проблема в том, что в шаблонах и в CMD у меня вместо изображений возвращается None.
Мнения:
class AddProductImages(TemplateView):
template_name = "addimages.html"
def post(self, *args, **kwargs):
try:
images = self.request.FILES.getlist('images')
product = Product.objects.get(id = self.kwargs['pk'])
for image in images:
product_images = Images.objcts.create(
product = product,
images = image
)
return redirect('index')
except Exception as e:
print(e)
Урлы:
path('addimages/<int:pk>/', AddProductImages.as_view(), name="addimages"),
Шаблоны:
<div class="container my-5">
<br />
<h1>ADD IMAGE</h1>
<br />
<hr />
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="images" id="" class="form-control" multiple>
<br>
<button type="submit" class="btn btn-sm btn-primary my-3">Submit</button>
</form>
</div>
Результаты:
""" The result is so: what's the problem please?
ValueError: The view photo.views.AddProductImages didn't return an HttpResponse object. It returned None instead.
[31/Aug/2022 22:08:11] "POST /addimages/1/ HTTP/1.1" 500 65400
"""
Не мог бы кто-нибудь проверить это, пожалуйста? Спасибо!
Скорее всего, исключено, поскольку это единственное место, где вы ничего не возвращаете.
Я также понимаю, почему это исключение.
product_images = Images.objcts.create(
product = product,
images = image
)
должно быть:
product_images = Images.objects.create(
product = product,
images = image
)
Эй, по крайней мере, теперь вы узнали, почему такие пустые except
заявления, как это, не годятся. Попробуйте быть более конкретным в исключениях. Вы даже можете сделать так:
try:
code...
except ValueError as e:
print(e)
except Product.DoesNotExist as e:
print(e)
Таким образом, вы можете адаптировать свой код к возникающим исключениям, и простое SyntaxError
не застанет вас врасплох, как сейчас.
Важно возвращать объект HttpResponse. Вот как это исправить -
- Поймав исключение, вы все равно должны вернуть объект HTTPResponse. При отсутствии оператора возврата произойдет ошибка с сообщением, которое вы сейчас получаете.
- Чтобы решить проблему №1, я добавил еще один оператор перенаправления в блок исключения. Пожалуйста, добавьте цель, которая работает в вашем случае.
- При создании
Image
допущена опечатка. Должно бытьImages.objects.create
. В настоящее время опечатка находится на словеobject
. Из-за ошибки поток попадает в блок исключений и впоследствии нарушает ваш поток.
class AddProductImages(TemplateView):
template_name = "addimages.html"
def post(self, *args, **kwargs):
try:
images = self.request.FILES.getlist('images')
product = Product.objects.get(id = self.kwargs['pk'])
for image in images:
product_images = Images.objects.create(
product = product,
images = image
)
return redirect('index')
except Exception as e:
return redirect('some_other_target')