Добавление изображений в папку. Django
Я пишу небольшой проект на django с приложением 'santechnic' и столкнулся с проблемой.В какую папку я должен загрузить изображения в модели Product, чтобы запрос get мог их найти?
santechnic/models.py
class Category(models.Model):
category_name = models.CharField(max_length=200, default="", primary_key=True)
category_image = models.ImageField(default="", upload_to='upload/images/categories')
class Product(models.Model):
product_name = models.CharField(max_length=200, primary_key=True)
length = models.FloatField(default=0.0)
width = models.FloatField(default=0.0)
height = models.FloatField(default=0.0)
product_image = models.ImageField(default="", upload_to=)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('santechnic/', include('santechnic.urls'))
]
santechnic/urls.py
app_name = "santechnic"
urlpatterns = \[
path('', views.CategoryView.as_view(), name='category'),
path('\<slug:category_name\>/', views.ProductsView.as_view(), name='products'),
path('\<slug:category_name\>/\<slug:product_name\>/', views.ProductDetailView.as_view(), name='detail'),
\]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
santechnic/views.py
class CategoryView(generic.ListView):
template_name = 'santechnic/home.html'
context_object_name = 'category_list'
model = Category
class ProductsView(generic.ListView):
template_name = 'santechnic/products.html'
context_object_name = 'products_list'
model = Product
часть settings.py
MEDIA_URL = ''
MEDIA_ROOT = ''
Директория
Я пробовал генерировать путь:
def generate_path(instance, filename):
return '%s/upload/images/products/' % instance.category.category_name
Но у меня возникло исключение SuspiciousFileOperation.
Также для примера я вручную добавил путь 'toilets/upload/images/products' в upload_to и получил "GET /santechnic/toilets/toilets/upload/images/products/1.png HTTP/1.1" 404 (здесь category_name='toilets').
Если путь - 'upload/images/products', я снова получаю "GET /santechnic/toilets/upload/images/products/1.png HTTP/1.1" 404
Помогите мне, пожалуйста. Как я могу решить эту проблему?
Вы установили Pillow?
pip install pillow
может быть, вам стоит погуглить и попробовать
Удачи!
Прежде всего, вам не нужно вручную создавать папку для хранения изображений, когда вы напишите upload_to в поле model, она автоматически создаст папку media внутри вашего проекта.
В models.py:
product_image = models.ImageField(upload_to="images/") #after writing this, it will create media/images folder inside your project.
Чтобы отобразить это в шаблоне:
<img src="/media/{{product_image}}" /> #here image will display.
Примечание: не забудьте добавить media url и media root в файл settings.py.