Hochgeladene Bilder nicht angezeigt, falscher Pfad
Ich habe ein problem mit der Anzeige von Bildern, die hochgeladen wurden von admin-panel. Django macht falsche Weg, wahrscheinlich wegen meiner Konfiguration Fehler irgendwo...
Dies ist mein Modell definition:
class Article(models.Model):
"""News article, displayed on homepage to attract users"""
class Meta:
db_table = 'article'
title = models.CharField(max_length=64)
headline = models.CharField(max_length=255)
content = HTMLField()
image = models.ImageField(upload_to = 'articles/', null=True, blank=True)
active = models.BooleanField()
created_at = models.DateTimeField()
def __unicode__(self):
return self.title
Dies ist die url-Konfiguration:
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# some stuff
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py:
PROJECT_DIR = os.path.dirname(__file__)
MEDIA_ROOT = os.path.join(PROJECT_DIR, "media")
MEDIA_URL = '/media/'
Ansicht:
def slider(request):
context = Context ({ 'articles': Article.objects.order_by('-created_at')[:5] })
return render(request, 'articles/slider.html', context)
werden und die Vorlage:
{% for article in articles %}
<img src="{{ article.image.url }}" alt="" />
Ich würde erwarten, dass django zu erbringen http://127.0.0.1:8000/media/articles/slide-02.jpg
aber jetzt macht es http://127.0.0.1:8000/media/slide-02.jpg
. Ich habe definiert, die upload_to=articles/
in der model-Klasse. Also warum die article.image.url
Attribut zurückgeben, einen Weg zu finden, ohne diese bedeutende Verzeichnis?
edit: ich habe etwas falsch mit meinem Modell. Es erkennt nicht die upload_to Verzeichnis:
$ ./manage.py shell
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from articles.models import Article
>>> Article.objects.all()
[<Article: Blackened Recordings Launches>, <Article: The Rockin' Return of Deep Purple>, <Article: See Emily Day 20th April>, <Article: Celebration Day Premieres In Four Countries Announced>, <Article: Waging heavy innovation>, <Article: Rush to play festival D'Ete, Quebec City>]
>>> Article.objects.all().get(pk=1)
<Article: Blackened Recordings Launches>
>>> Article.objects.all().get(pk=1).image
<ImageFieldFile: slide-03.jpg>
>>> Article.objects.all().get(pk=1).image.path
u'/var/www/django/djninja/djninja/media/slide-03.jpg'
>>> Article.objects.all().get(pk=1).image.url
'/media/slide-03.jpg'
Wieder, es sollte media/articles/slide-03.jpg
statt media/slide-03.jpg
. Also ich denke, alle routing/template ist ok, etwas stimmt nicht mit dem Modell.
- Sieht es ok aus für mich. Vielleicht das Bild wurde hochgeladen, bevor Sie die
upload_to=articles
? Oder vergessen haben, klicken Sie auf " speichern in deinem editor nach hinzufügen, dass? (Sorry, habe zu Fragen). - alle Datensätze geladen werden mit Befestigungen/syncdb, also denke ich dass es funktionieren sollte ok.
- versuchen
/media/{{ article.image }}/
Du musst angemeldet sein, um einen Kommentar abzugeben.
In views.py:
In slider.html:
In urls.py:
Versuchen Sie mithilfe des oben angegebenen codes.
Obige Lösung ist vollkommen ok. Mein problem war der falsch konfigurierten VORRICHTUNGEN, geschrieben in JSON und in die Datenbank geladen. Ich dachte, dass Sie passieren
articles
Verzeichnis wie dieupload_to
kwarg, es wird dynamisch geladen werden. Es ist nicht. Es wird nur beim speichern des Bildes und wird ignoriert beim laden des Bildes aus der Datenbank. Also, wenn ich hatteIch es geändert:
Und es funktionierte. In der Tat, es funktionierte die ganze Zeit, aber ich vermisse einen Hinweis auf, dass in der offiziellen django-docs.
Haben Sie versuchen, verwenden Sie eine upload-Methode :
upload_to
wird ignoriert :/. Ich sah in django-source-code und ich habe festgestellt, dass die beidenFileField
undImageField
verwenden Sie dieStorage
Mechanismus. Vielleicht gibt es eine Konvention, welcher Wert übergeben werden sollupload_to
kwarg? Eine Konvention, der ich nicht Folgen - und dies ist die Ursache?/media/media/articles/file.jpg
Pfad in der Vorlage, dastorage.url
/storage.path
zurück/media/
wie es konfiguriert ist, insettings.py
.