2016-12-04 2 views
1

Ich habe ein Django-Modell für ein vom Benutzer hochgeladenes Foto. Es enthält ein Feld definiert alsCustomize ImageField.image.url

class Photo(models.Model): 
    image = models.ImageField(upload_to='photo_image_files') 
    @property 
     def name(self): 
      return filename_without_extension 
    ... 

und settings.py definiert

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

Dies bedeutet, Bilder in /media/photo_image_files/ gespeichert werden. Ich möchte JPEG-Dateien unter /jpeg/:filename zugänglich machen und den tatsächlichen Pfad zu den Bildern von Besuchern verbergen. Ich habe die entsprechende Ansicht und URL definiert. Wie auch immer, jetzt {{ photo.image.url }} zeigt vorhersehbar auf /media/photo_image_files/filename.jpg. Zur Umgehung des Problems schließen ich Bilder als

<img src="/jpeg/{{ photo.name }}" /> 

Aber das bedeutet, dass ich die Stelle zweimal, in urls.py angeben und in der Vorlage. Wie kann ich die URL anpassen?

Antwort

0

Sie könnten ImageField Unterklasse und Ihre eigene .url() Methode definieren:

class JpegImageField(ImageField): 
    @property 
    def url(self): 
     return "/jpeg/{name}".format(name=self.name) 

und das neue Feld-Klasse verwenden, die anstelle der normalen ImageField:

class Photo(models.Model): 
    image = models.JpegImageField(upload_to='photo_image_files') 
+0

Tat Dank. – texnic