Gerenciamento de arquivos estáticos (ex.: imagens, JavaScript, CSS)Link para este cabeçalho

Sites geralmente precisam servir arquivos adicionais como imagens, JavaScript, ou CSS. No Django, nós nos referimos a estes arquivos como “arquivos estáticos”. O Django fornece django.contrib.staticfiles para ajudar você a gerenciar eles.

Está página descreve como você pode servir estes arquivos estáticos.

Configurando arquivos estáticosLink para este cabeçalho

  1. Certifique-se de que django.contrib.staticfiles está incluído no seu INSTALLED_APPS.

  2. Em seu arquivo de configurações, defina STATIC_URL, por exemplo:

    Code
    STATIC_URL = '/static/'
    
  3. In your templates, use the static template tag to build the URL for the given relative path using the configured STATICFILES_STORAGE.

    Django template
    {% load static %}
    <img src="{% static "my_app/example.jpg" %}" alt="My image"/>
    
  4. Armazene seus arquivos estáticos no diretório chamado static dentro da sua app. Por exemplo my_app/static/my_app/example.jpg.

Seu projeto irá provavelmente ter ativos estáticos que não estão amarrados a uma app em particular. Além de usar um diretório static/ dentro de sua app, você pode definir uma lista de diretórios (STATICFILES_DIRS) no seu arquivo de configurações onde o Django também irá procurar por arquivos estáticos. Por exemplo:

Code
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]

Veja a documentação para a definição do STATICFILES_FINDERS para detalhes sobre como o staticfiles encontra seus arquivos.

Servindo arquivos estáticos durante o desenvolvimentoLink para este cabeçalho

If you use django.contrib.staticfiles as explained above, runserver will do this automatically when DEBUG is set to True. If you don’t have django.contrib.staticfiles in INSTALLED_APPS, you can still manually serve static files using the django.views.static.serve() view.

Isso não é apropriado para uso em produção! Para algumas estratégias de deploy, veja Deploy de arquivos estáticos.

Por exemplo, se seu STATIC_URL está definido como /static/, você pode fazê-lo adicionando o seguinte pedaço de código no seu urls.py:

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

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Servindo arquivos que foram enviados pelo usuário durante o desenvolvimentoLink para este cabeçalho

During development, you can serve user-uploaded media files from MEDIA_ROOT using the django.views.static.serve() view.

Isso não é apropriado para uso em produção! Para algumas estratégias de deploy, veja Deploy de arquivos estáticos.

Por exemplo, se o seu MEDIA_URL está definido como /media/, você pode fazê-lo adicionando o seguinte pedaço de código no seu urls.py:

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

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

TestandoLink para este cabeçalho

Ao executar testes que usam requisições HTTP reais ao invés do cliente de teste embutido (isto é, quando se usa a LiveServerTestCase do Django) o conteúdo estático precisa ser servido junto com o resto do conteúdo então o ambiente de teste reproduz o real tão fielmente quanto possível, mas LiveServeTestCase tem somente funcionalidades de servidor muito básicas de arquivos: Ele não sabe sobre as funcionalidades de procura da aplicação staticfiles e assume que o conteúdo estático já tenha sido coletado no STATIC_ROOT.

Por causa disso, staticfiles vem com sua própria django.contrib.staticfiles.testing.StaticLiveServerTestCase, uma subclasse daquela que vem embutida que tem a habilidade de servir de maneira transparente todos os ativos durante a execução destes testes de uma maneira similar a que temos em tempo de desenvolvimento com DEBUG = True, isto é, sem precisar coletá-los usando o collectstatic antes.

DeployLink para este cabeçalho

django.contrib.staticfiles fornece um comando de gerenciamento conveniente para juntar arquivos estáticos em um único diretório para você poder servi-los facilmente.

  1. Defina a configuração do STATIC_ROOT para o diretório do qual você gostaria de servir estes arquivos, por exemplo:

    Code
    STATIC_ROOT = "/var/www/example.com/static/"
    
  2. Execute o comando de gerenciamento collectstatic

    Code
    $ python manage.py collectstatic
    

    Isso irá copiar todos os arquivos dos seus diretórios estáticos para dentro do diretório definido em STATIC_ROOT.

  3. Use um servidor Web de sua escolha para servir os arquivos. O Deploy de arquivos estáticos cobre algumas estratégias de deploy comuns para arquivos estáticos.

Aprenda maisLink para este cabeçalho

Este documento cobriu o básico e alguns padrões comuns de uso. Para detalhes completos sobre todas as configurações, comandos, tags de templates, e outras partes incluidas em django.contrib.staticfiles, veja a referência de arquivos estáticos.