Ich baue eine Galerie mit Django (1.5.1) auf meinem lokalen Rechner. In meinem Album-Modell habe ich eine ImageField
. Es gibt eine Ansicht, um alle Bilder eines Albums anzuzeigen. Es funktioniert gut, aber am Ende werden keine Bilder angezeigt. Wie Sie sehen, gibt es einen Bildrand, aber die Bilder werden nicht geladen.
class Category(models.Model):
###
class Album(models.Model):
category = models.ForeignKey(Category, related_name='albums')
###
class Image(models.Model):
album = models.ForeignKey(Album)
image = models.ImageField(upload_to = 'images/albums/')
def detail(request, album_id):
album = get_object_or_404(Album, pk=album_id)
return render(request, 'gallery/detail.html', {'album': album})
<h1>{{ album.title }}</h1>
{% for image in album.image_set.all %}
<a> <img src="{{ image.image.url }}" height="420"></a>
{% endfor %}
Wenn dies meine Albumadresse ist: http://localhost:8000/gallery/1/
Dann lautet die Bild-URL: http://localhost:8000/media/images/albums/photo_4.JPG (I get 404 when enter it in browser)
Dieser Medienstamm und diese URL:
MEDIA_ROOT = '/media/'
MEDIA_URL = '/localhost:8000/media/'
Mein Medienstamm hat 777 Berechtigung .
Was sollte ich jetzt tun? Wo ist das Problem?
Ich habe eine Ahnung, was das Problem ist. MEDIA_URL
sollte so sein:
MEDIA_ROOT='<the full path to your media folder>' (i.e: '/home/ike/project/media/')
MEDIA_URL='/media/'
Beachten Sie den Schrägstrich am Anfang. Das liegt daran, dass es sich bei media um einen Ordner in Ihrem Root-Server-Ordner handelt und nicht relativ zu der von Ihnen aufgerufenen anderen URL.
Fügen Sie diese Zeilen am Ende Ihrer urls.py
-Datei hinzu:
# You might need to import static function like this:
#from Django.contrib.staticfiles.urls import static
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Sie können die folgende Dokumentation überprüfen: https://docs.djangoproject.com/en/dev/howto/static-files
Hoffe das hilft
Wenn Sie den Dev-Server verwenden, müssen Sie etwas zu Ihrer urls.py hinzufügen, damit Django die Mediendateien bereitstellt, cf:
1.4.x: https://docs.djangoproject.com/de/1.4/howto/static-files/#serving-other-directories 1.5.x: https: //docs.djangoproject .com/de/dev/howto/static-files/# Serving-Dateien-hochgeladen von einem Benutzer
Quelle: https://docs.djangoproject.com/de/dev/howto/static-files/#serving-files-uploaded-by-a-user
from Django.conf import settings
from Django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
sie müssen zum URL-Muster hinzufügen, um hochgeladene Dateien bereitzustellen
Ändern Sie innerhalb Ihrer details.html Ihre
img src="{{ image.image.url }}" height="420"
Zu
img src="your_app/media/{{ image.image.url }}" height="420"
Ich hoffe das hilft. Wenn nicht, werde ich gerne weitere Informationen geben.
Überprüfen Sie Ihre settings.py Sie definieren MEDIA_ROOT
und 'MEDIA_URL' (und sie sind korrekt). MEDIA_ROOT gibt einen absoluten Ordner auf Ihrem Computer an, in dem Medien gespeichert werden.
Also zum Beispiel:
MEDIA_ROOT = '/myfolder/'
Dies würde bedeuten, dass es nach Image suchen würde:
/myfolder/images/albums/
Als nächstes in Ihrer settings.py überprüfen Sie Ihren MEDIA_ROOT
-Speicherort: d.
MEDIA_URL = 'http://localhost/myfolder/'
Also deine Bilder:
<img src="{{ MEDIA_URL }}{{ image.image.url }}" height="420"></a>
Dies würde sich beziehen auf:
http://localhost/myfolder/images/albums/
Hoffe das hilft.
Ich habe etwas von jeder der obigen Antworten genommen. Ich hatte das gleiche Problem wie du. Ich erhielt Rückgaben, die vom aktuellen /blog/post/(media_url)/image.jpg geleitet wurden
In meinem Admin-Portal konnte ich es leicht anzeigen und bearbeiten. Aber auf meiner post.html hatte ich Probleme, bis ich die {{MEDIA_URL}} -
Das ist alles, was mir gefehlt hat.
Ich habe meinen gesamten Abschnitt hier veröffentlicht, damit andere ihn lesen und sehen können, was ihnen fehlt.
post.html:
<label for="id_image"> <img src="{{ MEDIA_URL }}{{ p.image.url }}"
title="{{ p.title }}"> </label>
models.py:
from Django.core.files.storage import FileSystemStorage
upload_location =
FileSystemStorage(location='/home/pi/djcode/xpcpro/xpcpro/images')
class Blog(models.Model):
title = models.CharField(max_length=255)
author = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
date = models.DateTimeField(auto_now=False, auto_now_add=True)
body = models.TextField()
image = models.ImageField(
storage=upload_location, null=True,
blank=True, width_field="width_field",
height_field="height_field",)
height_field = models.IntegerField(default=0)
width_field = models.IntegerField(default=0)
urls.py:
from Django.conf.urls.static import static
from Django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
settings.py:
MEDIA_ROOT = "/home/pi/djcode/xpcpro/xpcpro/images/"
MEDIA_URL = "/images/"
Nun, ich weiß, dass diese Frage alt ist, aber ich habe sie jetzt gelöst, nachdem alle Optionen geprüft wurden:
MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
von Django.conf.urls.static importieren Sie statisch von Django.contrib.staticfiles.urls importieren Sie staticfiles_urlpatterns von Django.conf Importeinstellungen urlpatterns + = staticfiles_urlpatterns () urlpatterns + = static (settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
img src = "{{image.image.url}}" alt = "{{image.title}}"
HINWEISE: Sie benötigen MEDIA_URL nicht. Seien Sie vorsichtig mit '/', da image.image.url absolut ist. Wenn Sie also einen Namespace verwenden, müssen Sie keinen End-Schrägstrich hinzufügen.
img src = "/ namespace_name/{{image.image.url}}" -> BAD !!! img src = "/ namescape_name {{image.image.url}}" -> GUT !!!