Estou tentando fazer upload de uma imagem através do administrador do Django e, em seguida, visualizá-la em uma página no frontend ou apenas através de um URL.
Observe que tudo isso está na minha máquina local.
Minhas configurações são as seguintes:
MEDIA_ROOT = '/home/dan/mysite/media/'
MEDIA_URL = '/media/'
Eu configurei o parâmetro upload_to como 'images' e o arquivo foi carregado corretamente no diretório:
'/home/dan/mysite/media/images/myimage.png'
No entanto, quando tento acessar a imagem no seguinte URL:
http://127.0.0.1:8000/media/images/myimage.png
Eu recebo um erro 404.
Preciso configurar padrões URLconf específicos para a mídia carregada?
Qualquer conselho apreciado.
Obrigado.
^
sinal antesmedia//(?P<path>.*)$
, em algum momento quando acessamos o arquivo de mídia no caminho do URL do aplicativo (comohttp://127.0.0.1:8000/myapp/media/img/logo.png
), esse regular não é matemático.Leia o DOC oficial do Django com atenção e você encontrará a resposta mais adequada.
A melhor e mais fácil maneira de resolver isso é como abaixo.
fonte
if settings.DEV
verificação porque ele é desativado automaticamente?Para o Django 1.9, você precisa adicionar o seguinte código conforme a documentação:
Para obter mais informações, você pode consultar aqui: https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-files-uploaded-by-a-user-during-development
fonte
Aqui o que eu fiz no Django 2.0. Definir primeiro MEDIA_ROOT um MEDIA_URL em
setting.py
Em seguida, habilite o
media
context_processors
emTEMPLATE_CONTEXT_PROCESSORS
adicionandoSeu
media context processor
está ativado. Agora, todosRequestContext
conterão uma variávelMEDIA_URL
.Agora você pode acessar isso em seu
template_name.html
fonte
Sim. Para o desenvolvimento, é tão fácil quanto adicionar isso ao seu URLconf:
No entanto, para produção, você desejará veicular a mídia usando Apache, lighttpd, nginx ou seu servidor da web preferido.
fonte
(pelo menos) para o Django 1.8:
Se você usar
como descrito acima, verifique se nenhum padrão de URL "pegar todos", direcionado para uma exibição padrão, é anterior ao urlpatterns = []. Como .append colocará o esquema adicionado no final da lista, é claro que só será testado se nenhum padrão de URL anterior corresponder. Você pode evitar isso usando algo assim, em que o padrão de URL "catch all" é adicionado no final, independente da instrução if:
fonte
Aqui estão as alterações que eu tive que fazer para entregar PDFs para as publicações django aplicativo , usando o Django 1.10.6:
Utilizou as mesmas definições para diretórios de mídia que você, em
settings.py
:Conforme fornecido por @thisisashwanipandey, no principal do projeto
urls.py
:e uma modificação da resposta fornecida por @ r-allela, em
settings.py
:fonte
Outro problema que você provavelmente enfrentará após configurar todos os seus padrões de URLconf é que a variável
{{ MEDIA_URL }}
não funcionará em seus modelos. Para corrigir isso, em seu settings.py , adicioneno seu
TEMPLATE_CONTEXT_PROCESSORS
.fonte
Adicionando à Micah Carrick a resposta para o django 1.8:
fonte
TypeError: view must be a callable or a list/tuple in the case of include().
.Isto é o que eu fiz para obter a renderização de imagem no modo DEBUG = False no Python 3.6 com o Django 1.11
fonte
Seguindo as etapas mencionadas acima para => 3.0 no modo Debug
E também a parte que me chamou a atenção, a URL estática acima funcionou apenas no meu arquivo urls.py do projeto principal.Eu estava tentando primeiro adicionar ao meu aplicativo e me perguntando por que não conseguia ver as imagens.
Por fim, certifique-se de definir o seguinte:
fonte
Isso se for para o Django 1.10:
fonte
Sua configuração está correta. Alguns servidores da Web exigem a especificação específica dos arquivos de mídia e pasta estática. Por exemplo, em pythonanywhere.com, você deve ir para a seção 'Web' e adicionar o URL das pastas de mídia e pasta estática. Por exemplo:
Eu sei que é tarde, mas apenas para ajudar quem visita este link por causa do mesmo problema;)
fonte