2012-12-16 19 views
6

ich einige Probleme habe mit Benutzer hochgeladenen Dateien aus meiner Django-Anwendung dient:Django - dient Benutzer hochgeladen Bilder

von models.py:

class Picture (models.Model): 

    title = models.CharField(max_length=48) 

    date_added = models.DateTimeField(auto_now=True) 

    content = models.ImageField(upload_to='pictures') 

Aus dem Admin Django die Dateien in die hochgeladen erhalten user_res/Bilder/Ordner.

vom settings.py Projekt:

MEDIA_ROOT = 'user_res' 

MEDIA_URL = '/user_res/' 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 

Jedes Mal, wenn ich versuche, eine statische Ressource zu verweisen (nämlich CSS oder JS-Dateien), funktioniert alles einwandfrei URLs wie

http://localhost:8000/static/<subfolder>/main.css. 

jedoch unter Verwendung von Ich kann nicht auf vom Benutzer hochgeladene Dateien zugreifen (die von der Verwaltungsoberfläche im Ordner user_res/images mit einer relativen URL wie

user_res/pictures/test.jpg 
erstellt werden

die URL dynamisch mit dieser Codezeile aus einem Django Bild Modell aufrufbar erstellt:

return '<img src="{}"/>'.format(self.content.url) 

Ich habe keine speziellen URL-s für entweder statisch oder Mediendateien in der url.py Datei.

Hat jemand eine Idee, wie man Django dazu bringt, die Mediendateien zu bedienen? Ich verstehe, dass ich für Live-Umgebungen einen http-Server konfigurieren muss, um dieses bestimmte Verzeichnis zu bedienen, aber im Moment möchte ich eine leichte Entwicklungsumgebung beibehalten.

Vielen Dank.

+1

Wie so http://StackOverflow.com/A/2040098/630877? – arie

Antwort

0

ich glaube, das URL-Attribut eine relative URL zurückgibt (Django's FileField documentation), so sollten Sie haben:

return '<img src="{}"/>'.format(MEDIA_URL + self.content.url) 

Relative URLs wird nicht funktionieren, wenn ein Benutzer besuchen "http: // localhost/Bücher /" würde "http: //localhost/books/user_res/pictures/test.jpg" anfordern.

4

Bearbeiten Sie Ihre urls.py-Datei wie unten gezeigt.

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

urlpatterns = patterns('', 
    # ... the rest of your URLconf goes here ... 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

bearbeiten Ihre Projekte settings.py aussehen:

#Rest of the settings 
MEDIA_URL = '/media/' 
MEDIA_ROOT = 'media' 
STATIC_ROOT = '' 
STATIC_URL = '/static/' 

Lesen Sie bitte die offiziellen Django Dokumentation sorgfältig von einem Benutzer hochgeladen Dateien dient. Link zur Dokumentation: https://docs.djangoproject.com/en/1.5/howto/static-files/#serving-files-uploaded-by-a-user

Verwandte Themen