URLs de mídia Django em arquivos CSS
-
06-07-2019 - |
Pergunta
No Django modelos, é comum fazer o seguinte:
<img src="{{ MEDIA_URL }}/img/someImage.jpg">
Como você conseguir isso em um arquivo CSS que não é servido como um modelo?
.someClass {
/* can't do this this */
background: url("{{ MEDIA_URL }}/img/someImage.jpg");
/* either this */
background: url("http://media.domain.com/img/someImage.jpg");
/* or this */
background: url("/django_static_media/img/someImage.jpg");
/* can't do both... what to do? */
}
Eu preciso a capacidade de servir os meus arquivos a partir do subdomínio mídia, ou durante o trabalho offline e servi-los diretamente como uma visão django estática. Mas arquivos CSS são um problema, uma vez que não são processados ??como modelos e não posso usar a variável de contexto MEDIA_URL
.
Qual é a solução?
Editar:. Devo observar que o problema surge desde os meus arquivos de mídia estáticos são na verdade localizado em uma sub-domínio de mídia separado, negando assim o uso de caminhos relativos Got it, thanks!
Solução
Onde está o seu arquivo css servido a partir? Isso geralmente não é um problema como uma estrutura de mídia comum, tais como:
media/
images/
css/
js/
(ou similar) permite caminhos de arquivos relativos para imagens, por exemplo:
background: url('../images/foo.png');
Se você não está preparado para mudar seus meios pasta estrutura para acomodar caminhos de arquivos relativos, você pode ter outra alternativa senão declarações CSS sobrescrever a partir do modelo, usando um arquivo css secundário quando off-line:
{% if DEBUG %}
<link rel="stylesheet" href="{{ MEDIA_URL }}css/offline-mode.css" />
{% endif %}
É claro que a primeira opção é muito mais arrumado.
Outras dicas
Desculpe, você não vai gostar da resposta.
Eu tenho o mesmo problema:
Não há nenhuma maneira fácil de fazer isso com arquivos CSS serviu-estático.
O que eu faço:
- servidor de depuração, o trabalho localmente, meios servido localmente
- servidor de produção está hospedado em algum lugar comercial w / media on Amazon S3
- settings.py arquivo auto define MEDIA_URL (DEBUG, etc.) através de cheque hostname (para a produção diferenciada vs. / home / debug local)
- arquivos HTML todos têm links CSS com {{MEDIA_URL}} (+ RequestContext contextos para visitas)
- Eu gosto de nomes de caminho absoluto, portanto, um script "update_s3": (1) altera cada arquivo css está temporariamente para correção 'url ( "/ media' para 'url (" s3.mydomain.com/media' e (2) Atualizações / uploads meu diretório / media para o Amazon S3
Eu, então, ir para a produção e fazer uma atualização SVN & tocar o arquivo WSGI e validar
Está usando caminhos relativos (por imagem arquivos) em seus arquivos CSS não é uma opção viável para você?
Se você quiser usar directivas de modelo em um arquivo, por que não é servido por meio de um modelo?