/ / Django - accesso all'URL di un imageField che corrisponde a media_url non media_root - django, django-models, django-templates

Django - accesso all'URL di un imageField che corrisponde a media_url not media_root - django, django-models, django-templates

Ho il seguente modello contenente un campo immagine che desidero mostrare nel mio modello show_item.html.

Models.py

class Item(models.Model):
def get_file(self, filename):
url = "%s/%s" % (settings.MEDIA_ROOT, filename)
return url

seller = models.ForeignKey(settings.AUTH_USER_MODEL)
pic1 = ImageField(blank=True, upload_to=get_file, max_length=500)

So che MEDIA_ROOT e MEDIA_URL sono configurati correttamente.

Il problema è che nel mio modello provo ad accedere

 <img src="/images/{{ item.pic1 }}">

che non riesce a essere trovato. Dopo ulteriori indagini, ciò è dovuto al fatto che il percorso viene visualizzato come quello nella mia directory di file (ad esempio / home / utente / app / media / filename) piuttosto che in media_url (ad esempio www.mysite.com/media/filename). Ho controllato entrambe le posizioni e l'immagine è in effetti in entrambe.

La mia domanda: come accedo all'URL del modulo www.miosito.com/media/nomefile nel modello? Ho provato anche {{item.pic1.url}}, ma è ancora il percorso nel mio sistema.

Grazie!

risposte:

0 per risposta № 1

Se è possibile accedere al percorso caricato dell'immagine tramite il percorso statico, è sufficiente utilizzare l'URL statico. Oppure penso che potresti scrivere un URL, che punta a una vista per restituire la risposta dell'immagine.

Per esempio:

# in your urls.py
urlpatterns = patterns("",
url(r"^image/(?P<pk>d+)/$", "image_view", name="image_view"),
)

e quindi rispondi al contenuto dell'immagine nella visualizzazione immagine.

from django.core.servers.basehttp import FileWrapper
from django.http import StreamingHttpResponse

def image_view(request, pk):
item = Item.objects.get(pk=pk)
filename = item.pic1.url
wrapper = FileWrapper(open(filename, "rb"))
response = StreamingHttpResponse(wrapper)
response["Content-Length"] = os.path.getsize(filename)
response["Content-Disposition"] = "attachment; filename=image.jpg"
return response