Billeder fra ImageField i Django som ikke kan indlæses i skabelon

Jeg er bygningen et galleri, ved hjælp af Django(1.5.1) på min lokale maskine. I mit Album model jeg har en ImageField. Der er udsigt til at vise alle billeder i et album. Det fungerer godt, men i slutningen billeder, der ikke dukker op. Der er grænser for billeder som du kan se, men billeder indlæses ikke.

screenshot

Billeder fra ImageField i Django som ikke kan indlæses i skabelon

models.py

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/')

views.py

def detail(request, album_id):
    album = get_object_or_404(Album, pk=album_id)
    return render(request, 'gallery/detail.html', {'album': album})

detail.html

<h1>{{ album.title }}</h1>
{% for image in album.image_set.all %}
  <a>  <img src="{{ image.image.url }}" height="420"></a>
{% endfor %}

Hvis dette er mit album adresse: http://localhost:8000/gallery/1/

Derefter billede-URL:http://localhost:8000/media/images/albums/photo_4.JPG (I get 404 when enter it in browser)

Dette medie rod og url:

MEDIA_ROOT = '/media/'    
MEDIA_URL = '/localhost:8000/media/'  

Min medier roden har 777 tilladelse.

Hvad skal jeg gøre nu? Hvor er problemet?

Det synes serveren returnerer et Ikke Fundet svar, når de anmoder om billederne. Kan du kontrollere billedet element i browseren og skrive, hvad er adressen på billedet src attribut?
Redigeret mine spørgsmål med mere info om webadresser og root indstillinger.
Det er underligt, det skulle have været /media/images/albums/photo_4.jpg. Prøv at manuelt i browseren, skal du skrive denne adresse http://localhost:8000/media/images/albums/photo_4.jpg og se, hvis det viser billedet. Der bør være den korrekte adresse. Også i den kode, skrive img tag gerne denne <img src="/{{ image.image.url }}" height="420"> med en skråstreg før url. OK, kan se, hvis noget af dette virker.
localhost:8000/media/images/albums/photo_4.jpg url ikke vise billedet. Jeg får 404-fejl. Men “/” i img-tagget er en god idé. URL ‘ er synes korrekt. Men billeder indlæses ikke.
Har du prøvet, hvad mit svar siger? MEDIA_ROOT='/media/'

OriginalForfatteren sheshkovsky | 2013-04-24

7 svar

  1. 31

    Jeg har en anelse om hvad der er problemet. MEDIA_URL skal være noget lignende dette:

    MEDIA_ROOT='<the full path to your media folder>' (i.e: '/home/ike/project/media/')
    MEDIA_URL='/media/'

    Bemærk skråstreg i begyndelsen. Det er, fordi medierne er en mappe i roden af din server mappe og ikke i forhold til en hvilken som helst anden webadresse, som du kalder det.

    Og føjer disse linjer til slutningen af din urls.py fil:

    # 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)

    Kan du kontrollere følgende dokumentation: https://docs.djangoproject.com/en/dev/howto/static-files

    Håber, at dette hjælper

    Jeg får en fejl som staticfiles_urlpatterns ikke defineret. Nogen Idé?
    Tilføj denne linie i din urls.py: from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    Jeg får ‘navn ‘statisk’ ikke defineret’
    Tilføj dette: from django.contrib.staticfiles.urls import static

    OriginalForfatteren Paulo Bu

  2. 1

    Ind i din settings.py du har definere MEDIA_ROOT og ‘MEDIA_URL’ (og de er korrekte). Den MEDIA_ROOT angiver en absolut mappe på din maskine, hvor medierne vil blive gemt.

    Så for et eksempel:

    MEDIA_ROOT = '/myfolder/'

    Dette ville betyde, ville det se ud for billedet i:

    /myfolder/images/albums/

    Næste i din settings.py tjekke din MEDIA_ROOT placering: dvs

    MEDIA_URL = 'http://localhost/myfolder/'

    Så dine billeder:

    <img src="{{ MEDIA_URL }}{{ image.image.url }}" height="420"></a>

    Dette ville forholde sig til:

    http://localhost/myfolder/images/albums/

    Håber, at dette hjælper.

    billede url ændringer : localhost:8000/media/http://localhost:8000/media/billeder/album/…, når jeg ændre MEDIA_URL og føje det til src. Men det var fint, når MEDIA_URL = “. Så det løste ikke problemet.
    MEDIA_URL behov for at være en WEBADRESSE, der fører til samme mappe sti. {{ MEDIA_URL }} er unødvendige, når du bruger url-attribut, da det automatisk føjer MEDIA_URL men du behøver at angive en {{ MEDIA_URL }} eller dit billede vil ikke vise!

    OriginalForfatteren Glyn Jackson

  3. 1

    I din details.html, ændre din

    img src="{{ image.image.url }}" height="420"

    At

    img src="your_app/media/{{ image.image.url }}" height="420"

    Jeg håber, at dette hjælper. Hvis ikke vil jeg være glad for at give flere detaljer.

    Jeg tror ikke, hardcoding den statiske url ‘ en god idé. hvorfor ikke ilægning den statiske skabelon tag {% load static %} eller ved hjælp af {{ STATIC_URL }}?

    OriginalForfatteren Amimo Benja

  4. 0

    Jeg tog lidt fra hver af de svar ovenfor. Jeg havde det samme problem som dig. Jeg fik et afkast, der blev rettet fra den nuværende /blog/post/(media_url)/image.jpg

    I mine admin-portalen, jeg kunne se det nemt og redigere det. Men på min post.html jeg var der problemer, indtil jeg tilføjede {{ MEDIA_URL }} —

    Der er alt det jeg manglede.

    Jeg lagt min hele afsnittet nedenfor, så andre mennesker kunne læse det og se, hvad de mangler.

    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/"

    OriginalForfatteren jMrL

  5. 0

    Godt, at jeg ved dette spørgsmål er gammel, men jeg løste det lige nu efter at bevise, at alle optioner:

    1. settings.py:
     MEDIA_URL = '/media/' 
    MEDIA_ROOT = os.stien.slutte(BASE_DIR, "media") 
    
    1. urls.py FARE!!! Her er en af mine fejl var, at jeg brugte my_app/urls.py… Hvis du ønsker at bruge my_app/urls.py du er nødt til at tilføje “/namespace_name{{ billede.billede.url }}” til img’ src:
     fra django.conf.webadresser.statisk statisk import 
    fra django.contrib.staticfiles.webadresser import staticfiles_urlpatterns 
    fra django.conf import-indstillinger 
    
    urlpatterns += staticfiles_urlpatterns() 
    urlpatterns += statisk(indstillinger.MEDIA_URL, document_root=indstillinger.MEDIA_ROOT) 
    
    1. Din skabelon, detail.html
     img src="{{ billede.billede.url }}" alt="{{ billede.titel }}" 
    

    BEMÆRKNINGER:
    Yo behøver ikke MEDIA_URL, være forsigtig med ‘/’, fordi billedet.billede.url er absolut, så hvis du bruger et namespace, så du behøver ikke at tilføje finish skråstreg.

     img src="/namespace_name/{{ billede.billede.url }}" --> DÅRLIGT!!! 
    img src="/namescape_name{{ billede.billede.url }}" --> GODT!!! 
    

    OriginalForfatteren Leaf

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *