2016-05-27 8 views
2

Ich habe einen einfachen Django Blog erstellt, und ich habe Probleme, Bilder in meinen Posts konsistent zu zeigen. Insbesondere erscheinen meine Bilder in der "Listen" -Ansicht (der Homepage für die Site), aber nicht in der "Detail" -Ansicht (beim Betrachten eines einzelnen Posts). Die Website ist hier, wenn Sie die Ausgabe sehen wollen Live: endicott.coBildfehler in Django Blog

Der Code für die Listenansicht unten:

{% extends "blog/base.html" %} 

{% block title %}endicott.co{% endblock %} 

{% block content %} 
<div class="page-header"> 
    <h1>endicott.co</h1> 
    <p>Perspectives on society, data, and economics</p> 
</div> 

    {% for post in posts %} 
     <h2> 
      <a href="{{ post.get_absolute_url }}"> 
       {{ post.title }} 
      </a> 
     </h2> 
     <p class="date"> 
      Published {{ post.publish }} by {{ post.author }} 
     </p> 
     <img src="{{ post.image.url }}" alt="img"> 
     {{ post.body|linebreaks }} 
    {% endfor %} 
    {% include "pagination.html" with page=page_obj %} 
{% endblock %} 

Der Code für die Detailansicht ist unten aufgeführt:

{% extends "blog/base.html" %} 

{% block title %}{{ post.title }}{% endblock %} 

{% block content %} 
    <h1>{{ post.title }}</h1> 
    <img src="{{ post.image.url }}" alt="img"> 
    <p class="date"> 
     Published {{ post.publish }} by {{ post.author }} 
    </p> 
    {{ post.body|linebreaks }} 
{% endblock %} 

Irgendwelche Gedanken darüber, warum Django das Bild in der Liste korrekt zeigt, aber nicht die Detailansicht? Lassen Sie mich wissen, ob ich zusätzlichen Code für mehr Hintergrund posten sollte.

Die Dateistruktur ist wie folgt:

blog/ 
-__pycache__/ 
-migrations/ 
-templates/ 
--blog/ 
---post/ 
----detail.html 
----list.html 
---base.html 
--pagination.html 
-__init__.py 
-admin.py 
-apps.py 
-models.py 
-tests.py 
-urls.py 
-view.py 
media/ 
-img/ 
--[where images are stored] 
mysite/ 
-__pycache__/ 
-static/ 
-__init__.py 
-settings.py 
-urls.py 
-wsgi.py 

Mein Blog urls.py Datei unter:

from django.conf.urls import url 
from . import views 



from django.conf import settings 
from django.conf.urls.static import static 



urlpatterns = [ 
    # post views 
    #url(r'^$', views.post_list, name='post_list'), 
    url(r'^$', views.PostListView.as_view(), name='post_list'), 
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\ 
     r'(?P<post>[-\w]+)/$', 
     views.post_detail, 
     name='post_detail'), 
] 




if settings.DEBUG: 
    urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Die mysite urls.py Datei unter:

from django.conf.urls import include, url 
from django.contrib import admin 

##### adds 
from django.conf import settings 
from django.conf.urls.static import static 


urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'', include('blog.urls', 
          namespace='blog', 
          app_name='blog')), 
] 



if settings.DEBUG: 
    urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
+2

Das Img-Tag ist 'img'. Auf der ersten Seite versucht es, es von http: // http: //www.endicott.co/media/media/img/SSI_Per_Capita.png zu laden, während es in der Detailansicht versucht, es von "http: //www.endicott.co/2016/05/26/social-security-spending/media/media/img/SSI_Per_Capita.png – saq7

+0

Was meinst du mit "Routen"? – AME

+1

Ich nahm die Routen aus dem Kommentar heraus, weil ich nicht sicher bin, ob das das Problem ist. Routen für Django sind jedoch die Datei urls.py. https://docs.djangoproject.com/de/1.9/topics/http/urls/ – saq7

Antwort

2

Ihr Problem ist, dass die src= als relative URL verstanden wird (genau wie saq7 hingewiesen). Sie möchten, dass das Bild src= auf eine absolute URL verweist (beginnend mit http://), da sich das Bild an einem absoluten Ort vom Stamm der Website (von der Domain) befindet.

Um dies durchzuführen, verwenden Sie {% media post.image.url %}. Beachten Sie, dass Sie dazu couple of additions bis , insbesondere MEDIA_ROOT und MEDIA_URL ausführen müssen, damit das Vorlagen-Tag {% media %} funktioniert.

Die Verwendung von Mediendateien auf diese Weise (mit {% media %}) ist die häufigste und akzeptierte Art und Weise. Beachten Sie, dass in der Produktion (d. H. Hinter einem echten Webserver) solche Dateien nicht Server von Django sein sollten, beachten Sie, wie dieser Artikel hat:

Dies ist nicht für den Produktionseinsatz geeignet!

Noch gibt es einen anderen Artikel in der Django-Dokumentation explaining what to do to configure your webserver to serve these files.


Auch, wenn Sie setzen MEDIA_URL = '/media/' Sie müssen das media/ Präfix von post.image.url entfernen.

+0

Danke, ich konnte es mit diesem allgemeinen Ansatz beheben. – AME

Verwandte Themen