Pergunta

Eu criaram uma href="http://en.wikipedia.org/wiki/Django_%28web_framework%29" rel="noreferrer"> aplicação que as imagens usos. Eu acho que criaram a mídia configurações MEDIA_ROOT e MEDIA_URL corretamente. No entanto, as imagens não aparecem. Você sabe o que pode ser o problema?

Let considere este exemplo:

Os arquivos de imagem estão sob / home / www / media / app / photos e estamos tentando pedido http://example.com/photos/123.jpg

Devo usar essas configurações?

MEDIA\_ROOT = /home/www/media

MEDIA_URL = http://example.com/app

UPDATE:. Esqueceu-se de mencionar que eu estou usando built-in servidor de desenvolvimento

Foi útil?

Solução

servir conteúdo estático de Django é desencorajado do-se colaborador (se não me engano, ele só funciona quando está no modo de depuração). Você deve usar um servidor web dedicado, em vez disso.

Se você realmente precisar fazer isso, de qualquer maneira, leia a documentação on como para servir arquivos estáticos .

Outras dicas

PARA O DESENVOLVIMENTO SOMENTE

Você pode configurar um servidor de mídia estática para uso com o seu servidor de desenvolvimento, fazendo isso em seu arquivo urls.py. Anexei o código mostrando como eu usá-lo (juntamente com os condicionais DEBUG forçadas.)

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}),
    )

Eu coloco minha MEDIA_ROOT em um subdiretório do HTML / mídia e link para ele como tal no settings.py

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

Após o desenvolvimento estiver concluído, o projeto é implantado no servidor web onde os arquivos de mídia estáticos são então servido por Apache usando directivas.

Esta é a maneira correta de mostrar arquivos de imagem com ImageField. Imagine que temos uma imagem no perfil de usuário:

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 é o caminho que os dados do usuário de upload vai. Esta é sub-diretório de FULL_PATH_OF_MEDIA, o que significa que o arquivo carregado terá

FULL_PATH_OF_MEDIA/PATH_TO_UPLOAD 

path.Now completa este conteúdo pode ser acessado no endereço:

SITE_NAME/URL_OF_MEDIA/PATH_TO_UPLOAD

Eu também recomendo a leitura deste on static_files vs media_files

doc

Eu suspeito que você está recebendo a página Django 404. Tente acessar diretamente uma das suas imagens e ver se o que está acontecendo.

Se assim for, a sua necessidade de configurar seu servidor web para não pedidos de envio dentro de sua hierarquia de mídia para Django, mas em vez disso, servi-los diretamente. Aqui está um recorte do meu arquivo conf Apache. A primeira seção diz Apache para enviar tudo para Django. A segunda seção tem "SetHandler Nenhum" que diz "coisas alça sob / media na forma normal."

http://docs.djangoproject.com/en/dev / howto / implantação / versão ModPython / para todos os detalhes excitantes.

arquivo httpd.conf parcial para 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>

Estou ciente de que a pergunta original é com o servidor dev, mas para qualquer pessoa que está à procura de uma resposta ambiente de produção:

https://docs.djangoproject.com/en/1.8 / howto / static-files / implantação / fornece um guia sobre como ter Django servir arquivos em um ambiente de produção. Pelo tom do guia, parece implicar que o melhor é ter um servidor web separado para lidar com a arquivos ou usar mod_wsgi com Apache

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top