---
title: "Bagaimana mengelola berkas statik (misalnya gambar, JavaScript, CSS)"
version: 5.1
locale: id
source: https://docs.djangoproject.com/id/5.1/howto/static-files/
canonical: https://djangodocs.dev/id/5.1/howto/static-files/
---
# Bagaimana mengelola berkas statik (misalnya gambar, JavaScript, CSS)

Situs jaringan pada umumnya butuh melayani tambahan berkas-berkas seperti gambar, JavaScript, atau CSS. Di Django, kami mengacu pada berkas-berkas ini sebagai "berkas-berkas tetap". Django menyediakan [`django.contrib.staticfiles`](/id/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles) untuk membantu anda mengelola mereka.

Halaman ini menggambarkan bagaimana anda dapat melayani berkas statis ini.

## Mengkonfigurasi berkas-berkas tetap

1. Pastikan bahwa `django.contrib.staticfiles` disertakan dalam [`INSTALLED_APPS`](/id/5.1/ref/settings/#std-setting-INSTALLED_APPS) anda.
2. Di berkas pengaturan anda, tentukan [`STATIC_URL`](/id/5.1/ref/settings/#std-setting-STATIC_URL), sebagai contoh:

   ```
   STATIC_URL = "static/"
   ```
3. Di cetakan anda, gunakan etiket cetakan [`static`](/id/5.1/ref/templates/builtins/#std-templatetag-static) untuk membangun URL untuk jalur relatif yang diberikan menggunakan nama lain `staticfiles` [`STORAGES`](/id/5.1/ref/settings/#std-setting-STORAGES) yang sudah dikonfigurasi.

   ```html+django
   {% load static %}
   <img src="{% static 'my_app/example.jpg' %}" alt="My image">
   ```
4. Simpan berkas tetap di pelipat disebut `static` di aplikasi anda. Sebagai contoh `my_app/static/my_app/example.jpg`.

> **Melayani berkas-berkas**
>
> Dalam tambahan pada langkah-langkah konfigurasi ini, anda akan juga butuh untuk melayani berkas-berkas tetap.
>
> Selama pengembangan, jika anda menggunakan [`django.contrib.staticfiles`](/id/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles), ini akan dilakukan otomatis oleh [`runserver`](/id/5.1/ref/django-admin/#django-admin-runserver) ketika [`DEBUG`](/id/5.1/ref/settings/#std-setting-DEBUG) disetel ke `True` (lihat [`django.contrib.staticfiles.views.serve()`](/id/5.1/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve)).
>
> Cara ini adalah **terlalu tidak efesien** dan mungkin **tidak aman**, jadi dia **tidak cocok untuk produksi**.
>
> Lihat [Bagaimana menyebarkan berkas tetap](/id/5.1/howto/static-files/deployment/) untuk strategi yang sesuai untuk melayani berkas-berkas tetap dalam lingkungan produksi.

Proyek anda mungkin juga mempunyai aset tetap yang tidak diikat pada aplikasi khusus. Dalam tambahan untuk menggunakan direktori `static/` didalam aplikasi anda, anda dapat menentukan sebuah daftar direktori ([`STATICFILES_DIRS`](/id/5.1/ref/settings/#std-setting-STATICFILES_DIRS))  di berkas pengaturan anda dimana Django akan juga mencari untuk berkas-berkas tetap. Sebagai contoh:

```
STATICFILES_DIRS = [
    BASE_DIR / "static",
    "/var/www/static/",
]
```

Lihat dokumentasi untuk pengaturan [`STATICFILES_FINDERS`](/id/5.1/ref/settings/#std-setting-STATICFILES_FINDERS) untuk rincian pada bagaimana `staticfiles` menemukan berkas-berkas anda.

> **Namespacing berkas statis**
>
> Sekarang kami *mungkin* bisa lolos dengan menaruh berkas statis langsung dalam `my_app/static/` (daripada membuat subdirektori my\_app\` lain), tetapi itu merupakan ide buruk. Django akan menggunakan berkas statis pertama menemukan nama yang cocok, dan jika anda memiliki berkas statis dengan nama sama dalam aplikasi *berbeda*, Django tidak akan dapat membedakan diantara mereka. Kami butuh dapat menunjuk Django pada satu yg benar, dan cara terbaik memastikan ini dengan melakukan *namespace* mereka. Itu dia, dengan menaruh berkas statis tersebut dalam direktori *lain* dinamai untuk aplikasi itu sendiri.
>
> Anda dapat me-namespace aset statis di [`STATICFILES_DIRS`](/id/5.1/ref/settings/#std-setting-STATICFILES_DIRS) by specifying [prefixes](/id/5.1/ref/settings/#staticfiles-dirs-prefixes).

## Melayani berkas-berkas tetap selama pengembangan

Jika anda menggunakan [`django.contrib.staticfiles`](/id/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles) seperti yang dijelaskan diatas, [`runserver`](/id/5.1/ref/django-admin/#django-admin-runserver) akan melakukan ini secara otomatis ketika [`DEBUG`](/id/5.1/ref/settings/#std-setting-DEBUG) disetel ke `True`. Jika anda tidak mempunyai `django.contrib.staticfiles` di [`INSTALLED_APPS`](/id/5.1/ref/settings/#std-setting-INSTALLED_APPS),  anda dapat masih secara manual melayani berkas-berkas tetap menggunakan tampilan [`django.views.static.serve()`](/id/5.1/ref/views/#django.views.static.serve).

Ini tidak cocok untuk penggunaan produksi! Untuk beberapa strategi penyebaran umum, lihat [Bagaimana menyebarkan berkas tetap](/id/5.1/howto/static-files/deployment/).

Sebagai contoh, jika [`STATIC_URL`](/id/5.1/ref/settings/#std-setting-STATIC_URL) anda ditentukan sebagai `static/`, anda dapat melakukan ini dengan menambahkan potongan berikut ke `urls.py` anda:

```
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)
```

> **Note**
>
> Fungsi pembantu ini hanya bekerja dalam suasana mencari kesalahan dan hanya jika awalan diberikan adalah lokal (misalnya `static/`) dan bukan URL (misalnya `http://static.example.com/`).
>
> Juga fungsi pembantu ini hanya melayani folder [`STATIC_ROOT`](/id/5.1/ref/settings/#std-setting-STATIC_ROOT) sebenarnya; dia tidak menampilkan berkas-berkas tetap seperti [`django.contrib.staticfiles`](/id/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles).
>
> Akhirnya, berkas status dilayani melalui pembungkus pada lapisan aplikasi WSGI. Sebagai konsekuensinya, berkas statis meminta untuk tidak melewatkan melalui [middleware chain](/id/5.1/topics/http/middleware/) biasa.

## Melayani berkas-berkas terunggah oleh pengguna selama pengembangan

Selama pengembangan, anda dapat melayani berkas-berkas media diupload-pengguna dari [`MEDIA_ROOT`](/id/5.1/ref/settings/#std-setting-MEDIA_ROOT) menggunakan tampilan [`django.views.static.serve()`](/id/5.1/ref/views/#django.views.static.serve).

Ini tidak cocok untuk penggunaan produksi! Untuk beberapa strategi penyebaran umum, lihat [Bagaimana menyebarkan berkas tetap](/id/5.1/howto/static-files/deployment/).

Sebagai contoh, jika [`MEDIA_URL`](/id/5.1/ref/settings/#std-setting-MEDIA_URL) anda ditentukan sebagai `media/`, anda dapat melakukan ini dengan menambahkan potongan berikut ke [`ROOT_URLCONF`](/id/5.1/ref/settings/#std-setting-ROOT_URLCONF) anda:

```
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)
```

> **Note**
>
> Fungsi pembantu ini hanya bekerja dalam suasana mencari kesalahan dan hanya jika awalan diberikan adalah lokal (misalnya `media/`) dan bukan URL (misalnya `http://media.example.com/`).

## Pengujian

Ketika menjalankan percobaan yang menggunakan permintaan HTTP sebenarnya daripada klien percobaan siap pakai (yaitu ketika menggunakan [`LiveServerTestCase`](/id/5.1/topics/testing/tools/#django.test.LiveServerTestCase) siap pakai) aset tetap butuh dilayani bersama sisa dari isi sehingga lingkungan percobaan memproduksi kembali satu yang asli setepat mungkin, tetapi `LiveServerTestCase` mempunyai hanya sangat dasar berkas tetap-melayani fungsi: Dia tidak tahu bahwa penemu fitur dari aplikasi `staticfiles` dan menganggap isi statis telah dikumpulkan dibawah [`STATIC_ROOT`](/id/5.1/ref/settings/#std-setting-STATIC_ROOT).

Karena ini, `staticfiles` mengemas [`django.contrib.staticfiles.testing.StaticLiveServerTestCase`](/id/5.1/ref/contrib/staticfiles/#django.contrib.staticfiles.testing.StaticLiveServerTestCase) milik dia sendiri, sebuah subkelas dari satu siap pakai yang mempunyai kemampuan untuk transparan melayani semua aset selama pelaksanaan dari percobaan ini dengan cara sangat mirip pada apa kami dapat di waktu pengembangan dengan `DEBUG = True`, yaitu tanpa mengumpulkan mereka menggunakan [`collectstatic`](/id/5.1/ref/contrib/staticfiles/#django-admin-collectstatic) pertama kali.

## Penyebaran

[`django.contrib.staticfiles`](/id/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles) menyediakan kenyamanan perintah pengelolaan untuk mengumpulkan berkas-berkas tetap dalam direktori tunggal sehingga anda dapat melayani mereka dengan mudah.

1. Setel pengaturan [`STATIC_ROOT`](/id/5.1/ref/settings/#std-setting-STATIC_ROOT) ke direktori dari dimana anda ingin melayani berkas-berkas ini, sebagai contoh:

   ```
   STATIC_ROOT = "/var/www/example.com/static/"
   ```
2. Jalankan perintah pengelolaan [`collectstatic`](/id/5.1/ref/contrib/staticfiles/#django-admin-collectstatic):

   ```shell
   $ python manage.py collectstatic
   ```

   Ini akan menyalin semua berkas dari pelipat tetap anda kedalam direktori [`STATIC_ROOT`](/id/5.1/ref/settings/#std-setting-STATIC_ROOT).
3. Gunakan sebuah peladen jaringan dari pilihan anda untuk melayani berkas-berkas. [Bagaimana menyebarkan berkas tetap](/id/5.1/howto/static-files/deployment/) melingkupi beberapa strategi penyebaran umum untuk berkas-berkas tetap.

## Pelajari lagi

Dokumen ini melingkupi corak penggunaan dasar dan beberapa umum. Untuk melengkapi rincian pada semua pengaturan, perintah, etiket cetakan, dan potongan lainnya disertakan dalam [`django.contrib.staticfiles`](/id/5.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles), lihat [the acuan berkas tetap](/id/5.1/ref/contrib/staticfiles/).
