How to manage static files (e.g. images, JavaScript, CSS)Link para este cabeçalho

Websites generally need to serve additional files such as images, JavaScript, or CSS. In Django, we refer to these files as “static files”. Django provides django.contrib.staticfiles to help you manage them.

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 STORAGES alias.

    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 = [
    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

Se você usa o django.contrib.staticfiles como explicado acima, runserver vai fazer isso automaticamente quando :settings:`DEBUG` estiver configurado como True. Se você não tem django.contrib.staticfiles em INSTALLED_APPS, você ainda pode manualmente servir arquivos estáticos usando a view django.views.static.serve().

Isso não é apropriado para uso em produção! Para algumas estratégias de deploy, veja How to deploy static files.

For example, if your STATIC_URL is defined as static/, you can do this by adding the following snippet to your 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

Durante o desenvolvimento, você pode entregar arquivos de mídia enviados pelos usuários através do MEDIA_ROOT usando a view django.views.static.serve().

Isso não é apropriado para uso em produção! Para algumas estratégias de deploy, veja How to deploy static files.

For example, if your MEDIA_URL is defined as media/, you can do this by adding the following snippet to your ROOT_URLCONF:

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. Run the collectstatic management command:

    Shell
    $ 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 How to deploy static files 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.