2017-05-29 18 views
1

Ich habe das Modell folgendeDjango Imagefield zeigt absoluten Linux-Pfad in Vorlage

class Product(SiteBaseFields): 
    name = models.CharField(max_length=500) 
    description = models.CharField(max_length=500) 
    price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, default=0.00) 
    unit = models.CharField(max_length=500, null=True, blank=True, default=0.00) 
    image = models.ImageField(upload_to=settings.MEDIA_ROOT, null=True, blank=True) 

    def __unicode__(self): 
     return self.name 

Der Rekord Produkt in der Datenbank ist

d762ugo5f5706v=> select id, image from dj_commerce_product 
d762ugo5f5706v-> ; 
id |            image 
----+------------------------------------------------------------------------------------------------------ 
17 | /var/www/dj_node_project/media/iphone_4TTsU22.jpg 
19 | /var/www/dj_node_project/media/samsung_phone_5VlDULp.png 
18 | /var/www/dj_node_project/media/201409-w-americas-best-coffee-cities-new-orleans-cafe-du-_CTcGKwx.jpg 
(3 rows) 

Als ich <img src="{{MEDIA_URL}}{{product.image.url}}" /> in der Vorlage zu tun, ich zurück <img src="/var/www/dj_node_project/media/iphone_4TTsU22.jpg">, und die URL zum Bild ist total falsch. Ich kann die Ursache nicht herausfinden.

+1

zeigen Ihnen die Einstellungsdatei, wo Sie den Medienpfad – Exprator

+0

erklärt was ist der MEDIA_URL und MEDIA_ROOT in Ihrem settings.py? – rrmerugu

Antwort

1

Ändern Sie MEDIA_URL und MEDIA_ROOT in Ihrer settings.py.

# settings.py 
MEDIA_URL = 'media/' 
MEDIA_ROOT = os.path.join(BASE_DIR , "media") # this is the root/absolute path for uploaded files 

Laden Sie etwas hoch und prüfen Sie, ob das funktioniert. Das Problem hängt mit MEDIA_URL OR MEDIA_ROOT zusammen. Es ist ein häufiger Anfänger Fehler, MEDIA Einstellungen falsch zu konfigurieren.

Für Referenz:

https://docs.djangoproject.com/en/1.11/ref/settings/#media-root https://docs.djangoproject.com/en/1.11/ref/settings/#media-url

Edit:

FileField.upload_to Dieses Attribut stellt eine Art und Weise der Einstellung des Upload-Verzeichnis und Dateinamen und kann auf zwei Arten eingestellt werden. In beiden Fällen wird der Wert an die Storage.save() -Methode übergeben.

Wenn Sie einen String-Wert angeben, kann es strftime() Formatierungen enthält, , die von Datum/Uhrzeit der Datei-Upload ersetzt werden (so dass Dateien hochgeladen das angegebene Verzeichnis nicht füllen). Zum Beispiel:

class MyModel(models.Model): 
    # file will be uploaded to MEDIA_ROOT/uploads 
    upload = models.ImageField(upload_to='uploads/') 
    # or... 
    # file will be saved to MEDIA_ROOT/uploads/2015/01/30 
    upload = models.FileField(upload_to='uploads/%Y/%m/%d/') 
+0

Das habe ich schon! – user1187968

+0

können Sie dieses 'upload_to = settings.MEDIA_ROOT' Teil entfernen? und sehen, wie es funktioniert? Weil ich keinen guten Grund sehe, warum du das tun solltest. Mach es einfach 'upload_to = 'some_folder''. – rrmerugu

+0

hat die Bearbeitung das Problem behoben? – rrmerugu