1
resposta

É possível definir um MEDIA_URL por app?

Boa noite.

Da maneira como está configurada a variável MEDIA_URL no settings.xml é utilizada a mesma MEDIA_URL para todas as apps do projeto DJango.

MEDIA_URL = '/media/'

A minha URL para acesso à API de escola é http://localhost:8000/escola/ porque possuo mais do que uma app no projeto. O meu setup/urls.py está como abaixo:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('escola/', include('escola.urls')),
    path('cliente/', include('cliente.urls')),
]  + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Dessa forma quando eu adiciono a foto de um aluno através da URL http://localhost:8000/escola/alunos/1/ o endereço da foto retorna como http://localhost:8000/media/foto.jpg, mas eu gostaria que o endereço retornado fosse http://localhost:8000/escola/media/foto.jpg.

Ou seja, eu gostaria de colocar + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) no arquivo /escola/urls.py. Mas se faço isso no momento, sou obrigado a digitar na mão o /escola/ da URL da foto inserida.

Não sei se fui claro.

At.te.

1 resposta

Olá, como você está?

Peço desculpas pela demora em obter um retorno.

Uma das formas de resolver isso, é definir uma nova variável MEDIA_URL para cada aplicativo no arquivo de configurações (settings.py) e em seguida, você pode usar essa variável no arquivo urls.py de cada aplicativo, em vez de usar a variável MEDIA_URL definida globalmente.

Por exemplo, no arquivo settings.py, você pode definir:

ESCOLA_MEDIA_URL = '/escola/media/'
MEDIA_URL = (
    (ESCOLA_MEDIA_URL)
)

E no arquivo urls.py da aplicação escola, você pode usar:

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

urlpatterns = [
    # suas outras rotas aqui
] + static(settings.ESCOLA_MEDIA_URL, document_root=settings.MEDIA_ROOT)

Resultado:

Imagem que apresenta uma rota "escola/media/aluno.png" para a foto cadastrada

Dessa forma, quando você adiciona uma foto de um aluno o endereço da foto será http://localhost:8000/escola/media/aluno.png. E o mesmo pode ser feito para outros aplicativos, lembrando sempre de adicionar a variável da URL personalizada na tupla da variável MEDIA_URL.

Espero ter ajudado. Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!