2 votes

Ajouter des images à un dossier. Django

Je suis en train d'écrire un petit projet sur django avec une application 'santechnic' et j'ai rencontré un problème.to Dans quel dossier dois-je télécharger les images dans le modèle Product afin que la requête get puisse les trouver ?

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

partie de settings.py

MEDIA_URL = ''
MEDIA_ROOT = ''

Annuaire

enter image description here

J'ai essayé de générer un chemin :

def generate_path(instance, filename):
    return '%s/upload/images/products/' % instance.category.category_name

Mais j'ai eu une exception SuspiciousFileOperation.

Par exemple, j'ai ajouté manuellement le chemin 'toilets/upload/images/products' dans upload_to. et j'ai obtenu "GET /santechnic/toilets/toilets/upload/images/products/1.png HTTP/1.1" 404 (ici category_name='toilets').

Si le chemin est 'upload/images/products', j'obtiens à nouveau "GET /santechnic/toilets/upload/images/products/1.png HTTP/1.1" 404.

Aidez-moi, s'il vous plaît. Comment puis-je le résoudre ?

0voto

Manoj Tolagekar Points 59

Tout d'abord, vous n'avez pas besoin de créer un dossier manuellement pour stocker les images, lorsque vous écrivez upload_to dans le champ modèle, il créera automatiquement un dossier média dans votre projet.

Dans models.py :

product_image = models.ImageField(upload_to="images/") #after writing this, it will create media/images folder inside your project.

Pour l'afficher sur le modèle :

<img src="/media/{{product_image}}" /> #here image will display.

Settings.py :

MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(BASE_DIR,'media')

-1voto

Ardu1na Points 1

Avez-vous installé Pillow ?

pip install pillow

Vous devriez peut-être chercher sur Google et essayer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X