Как называется проблема, атрибут 'img' не имеет связанного с ним файла?
Моя цель - показать product_image
в шаблоне orderlist
. ProductOrder
работает хорошо, и он также сохраняет product_image
url в img
в базе данных. Но когда я попытался показать изображение в шаблоне, он выдал ошибку. Где на самом деле возникла проблема? Пожалуйста, дайте мне соответствующее решение.
models.py:
class Products(models.Model):
user = models.ForeignKey(User, related_name="merchandise_product_related_name", on_delete=models.CASCADE, blank=True, null=True)
product_image = models.ImageField(blank=True, null=True, upload_to = "1_products_img")
class ProductOrder(models.Model):
User = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='UserOrderRelatedName',on_delete=models.CASCADE)
img = models.ImageField(blank=True, null=True)
views.py:
это хорошо работает,
def Order(request, quick_view_id):
OrderProduct = get_object_or_404(Products, pk=quick_view_id)
if request.method == "POST" and request.user.is_authenticated:
ProductOrder.objects.create(
img = OrderProduct.product_image
)
return redirect('quick_view', quick_view_id)
def OrderList(request):
AllOrder = ProductOrder.objects.all()
context = {
"AllOrder":AllOrder,
}
return render(request, "order_list.html", context)
Шаблон:
{% for order in AllOrder %}
<img style="width: 100px;" src="{{order.img.url}}">
{% endfor %}
error:
ValueError at /OrderList/
The 'img' attribute has no file associated with it.
Request Method: GET
Request URL: http://127.0.0.1:8000/OrderList/
Django Version: 4.0.4
Exception Type: ValueError
Exception Value:
The 'img' attribute has no file associated with it.
Exception Location: D:\1_WebDevelopment\17_Ecomerce Website\ecomerce site\env\lib\site-packages\django\db\models\fields\files.py, line 40, in _require_file
Python Executable: D:\1_WebDevelopment\17_Ecomerce Website\ecomerce site\env\Scripts\python.exe
Python Version: 3.9.5
Python Path:
['D:\\1_WebDevelopment\\17_Ecomerce Website\\ecomerce site',
'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\python39.zip',
'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\DLLs',
'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39\\lib',
'c:\\users\\dcl\\appdata\\local\\programs\\python\\python39',
'D:\\1_WebDevelopment\\17_Ecomerce Website\\ecomerce site\\env',
'D:\\1_WebDevelopment\\17_Ecomerce Website\\ecomerce '
'site\\env\\lib\\site-packages']
Server time: Sat, 30 Jul 2022 13:52:11 +0000
Если product_image
или img
не имеет изображения, необходимо сделать условие if, которое проверяет наличие изображения, прежде чем его отрисовывать.
Например, в вашем шаблоне:
{% for order in AllOrder %}
{% if order.img %}
<img style="width: 100px;" src="{{order.img.url}}">
{% else %}
<img style="width: 100px;" src="<some static image url>">
{% endif %}
{% endfor %}
settings.py:
MEDIA_URL = '/media/'
MEDIA_ROOT = str(BASE_DIR.joinpath('media'))
urls.py:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
templates:
<img src="/media/image1.jpg" alt="">
Проблема может возникнуть во время отправки формы. Возможно, фактический файл не передается POST
на сервер, поэтому убедитесь, что в вашей форме есть enctype=multipart/form-data
там, где у вас method='post'
. Затем в вашем представлении, форма, отвечающая за отправку данных, должна иметь что-то вроде form = YourForm(request.POST, request.FILES
или, если вы не используете django форму, тогда изображение должно выбираться из запроса с помощью product_image = request.FILES.get('field_name')