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 № 1Se è 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