Frage

Ich habe eine Django Anwendung einrichten, die Bilder verwendet. Ich glaube, ich habe die Medieneinstellungen MEDIA_ROOT und MEDIA_URL richtig eingerichtet ist. Doch die Bilder zeigen, nicht auf. Wissen Sie, was das Problem sein kann?

Lassen Sie dieses Beispiel betrachten:

Die Bilddateien sind unter / home / www / media / app / Fotos und wir versuchen, a href = anfordern < "http://example.com/photos/123.jpg" rel = "noreferrer"> http://example.com/photos/123.jpg

Soll ich diese Einstellungen?

MEDIA\_ROOT = /home/www/media

MEDIA_URL = http://example.com/app

UPDATE:. vergessen zu erwähnen, dass ich Built-in bin mit Entwicklungs-Server

War es hilfreich?

Lösung

statischen Inhalt von Django ist entmutigt vom Entwickler selbst (wenn ich mich nicht falsch, es funktioniert nur, wenn im Debug-Modus). Sie sollten einen eigenen Web-Server verwenden, statt.

Wenn Sie wirklich tun müssen, wie auch immer, lesen Sie die Dokumentation auf wie dienen statische Dateien .

Andere Tipps

ENTWICKLUNGS ONLY

Sie können Setup einen statischen Medienservers für die Verwendung mit dem Entwicklungs-Server durch diese Datei in Ihrem urls.py tun. Ich habe den Code angebracht zeigt, wie ich es verwenden (zusammen mit dem Zwang DEBUG conditionals.)

from django.conf import settings
from django.conf.urls.defaults import *      

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('', 
    (r'^$', 'views.index'),            

    # Accounts
    (r'^accounts/login/$', 'views.user_login'),
    (r'^accounts/logout/$', 'views.user_logout'),

    # Contrib Modules
    (r'^admin/(.*)', admin.site.root),
)

if settings.DEBUG :
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
    )

ich meine MEDIA_ROOT in einem Unterverzeichnis html / Medien und Link, um es als solche in settings.py platzieren

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'html/media/').replace('\\','/')

Nach der Entwicklung abgeschlossen ist, wird das Projekt auf den Web-Server eingesetzt, wo statische Mediendateien dann bedient werden von Apache mit Richtlinien.

Dies ist der richtige Weg, Bilddateien mit Imagefield zeigen. Stell dir vor, wir ein Benutzerprofil Bild haben:

models.py:

UserProfile:
    profilePic= models.ImageField( upload_to='PATH_TO_UPLOAD', blank=True, null=True)

settings.py:

MEDIA_ROOT = 'FULL_PATH_OF_MEDIA'
MEDIA_URL = 'URL_OF_MEDIA'

urls.py:

urlpatterns = [
.
.
.
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

PATH_TO_UPLOAD ist der Weg, den Benutzer Upload-Daten geht. Dies ist das Unterverzeichnis von FULL_PATH_OF_MEDIA, das heißt die hochgeladene Datei hat

FULL_PATH_OF_MEDIA/PATH_TO_UPLOAD 

full path.Now dieser Inhalt kann unter folgenden URL abgerufen werden:

SITE_NAME/URL_OF_MEDIA/PATH_TO_UPLOAD

Ich empfehle auch das Lesen auf static_files vs media_files

doc

Ich vermute, dass Sie die Django 404 Seite bekommen. Versuchen Sie direkten Zugriff auf eines Ihrer Bilder und sehen, ob das passiert.

Wenn ja, um Ihr Bedarf zu Ihrem Web-Server zu konfigurieren nicht Bitte senden Sie Anfragen innerhalb Ihrer Medienhierarchie Django sondern stattdessen dient sie direkt. Hier ist ein Schnipsel aus meiner Apache conf-Datei. Der erste Abschnitt weist Apache alles Django zu senden. Der zweite Abschnitt hat „SetHandler None“, das besagt, „Sachen unter / media in gewohnter Weise handhaben.“

Siehe http://docs.djangoproject.com/en/dev / Howto / deployment / Mod_python / für alle spannenden Details.

Teil httpd.conf für PrinceOfPinot.com (AKA pop):

<Location "/">
    SetHandler python-program
    PythonAutoReload Off
    PythonDebug Off
    PythonPath "['/var/www/production/pop', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE settings
    PythonHandler django.core.handlers.modpython
</Location>

<Location "/media">
    SetHandler None
    AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
</Location>

Ich bin mir bewusst, dass die ursprüngliche Frage mit dem Dev-Server ist, sondern auch für alle anderen, die für eine Produktionsumgebung Antwort sucht:

https://docs.djangoproject.com/en/1.8 / Howto / statisch-Dateien / deployment / bietet eine Anleitung, wie man Dateien in einer Produktionsumgebung haben django dienen. Aus dem Ton der Führung, scheint es zu bedeuten, dass es am besten ist, einen separaten Web-Server haben Sie die Dateien oder verwenden mod_wsgi mit Apache

zu handhaben
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top