# dokumentasi Django 2.2.9.dev20191202104323

# Formulir membangun API

Widgets formulir Django dibangun menggunakan Django's template engines system.

Pengolahan membangun formulir dapat disesuaikan pada beberapa tingkat:

- Widget dapat menentukan nama-nama cetakan penyesuaian.
- Formulir dan widget dapat menentukan kelas-kelas pembangun penyesuaian.
- Sebuah cetakan widget dapat ditimpa oleh sebuah proyek. (Menggunakan kembali aplikasi tertentu jangan menimpa cetakan siap-pakai karena mereka mungkin bertentangan dengan cetakan-cetakan penyesuaian proyek.)

## Tingkat-rendah pembangun API

Pembangunan dari cetakan formulir dikendalikan oleh kelas pembangun penyesuaian. Sebuah pembangun penyesuaian dapat ditentukan dengan memperbaharui pengaturan `FORM_RENDERER`. Awalan itu pada `'``django.forms.renderers.DjangoTemplates``'`.

Anda dapat juga menyediakan penyesuaian dibangun dengan mengatur atribut `Form.default_renderer` atau dengan menggunakan argumen `renderer` dari `Widget.render()`.

Gunakan satu dari built-in template form renderers atau menerapkan anda sendiri. Pembangun penyesuaian harus menerapkan sebuah metode `render(template_name, context, request=None)`. Itu harus mengembalikan sebuah cetakan terbangun (sebagai string) atau memunculkan `TemplateDoesNotExist`.

## Pembangun formulir cetakan-siap-pakai

### `DjangoTemplates`

class `DjangoTemplates`

Pembangun ini menggunakan mesin `DjangoTemplates` berdiri sendiri (tidak terhubung ke apa yang anda telah konfigurasikan dalam pengaturan `TEMPLATES`). Itu memuat cetakan-cetakan pertama dari direktori cetakan formulir siap-pakai dalam `django/forms/templates` dan kemudian dari direktori cetakan aplikasi terpasang menggunakan pemuat `app_directories`.

Jika anda ingin membangun cetakan dengan penyesuaian dari pengaturan `TEMPLATES` anda, seperti pengeolah konteks sebagai contoh, gunakan pembangun `TemplatesSetting`.

### `Jinja2`

class `Jinja2`

Pembangun ini adalah sama seperti pembangun `DjangoTemplates` kecuali bahwa itu menggunakan sebuah backend `Jinja2`. Cetakan-cetakan untuk widget siap-pakai ditempatkan dalam `django/forms/jinja2` dan aplikasi terpasang dapat menyediakan cetakan dalam direktori `jinja2`.

Untuk menggunakan backend ini, semua widget dalam proyek anda dan aplikasi pihak-ketiganya harus mempunyai cetakan Jinja2. Meskipun anda menyediakan cetakan Jinja2 anda sendiri untuk wodget yang tidak mempunyai apapun, anda tidak bisa menggunakan pembangun ini. Sebagai contoh, `django.contrib.admin` tidak menyertakan cetakan Jinja2 untuk widgetnya karena penggunaan mereka dari etiket cetakan Django.

### `TemplatesSetting`

class `TemplatesSetting`

Pembangun ini memberikan anda kendali penuh dari bagaimana cetakan widget bersumber. Itu menggunakan `get_template()` untuk menemukan widget cetakan berdasarkan pada apa yang dikonfigurasikan dalam pengaturan `TEMPLATES`.

Menggunakan pembangun ini bersama dengan cetakan widget siap-pakai membutuhkan salah satu:

- `'django.forms'` in `INSTALLED_APPS` dan setidaknya satu mesin dengan `APP_DIRS=True`.

- Menambahkan direktori cetakan widget siap-pakai dalam `DIRS` dari satu mesin cetakan anda. Untuk membangkitkan jalur itu:

      import django
      django.__path__[0] + '/forms/templates'  # or '/forms/jinja2'

Menggunakan pembangun ini membutuhkan anda untuk memastikan cetakan formulir proyek anda butuhkan dapat ditempatkan.

## Konteks tersedia dalam cetakan widget

Cetakan widget menerima sebuah konteks dari `Widget.get_context()`. Secara awalan, widget menerima sebuah nilai tunggal dalam konteks, `widget`. Ini adalah sebuah dictionary yang mengandung nilai-nilai seperti:

- `name`
- `value`
- `attrs`
- `is_hidden`
- `template_name`

Beberapa widget menambah informasi lebih lanjut pada konteks. Sebagai contoh, semua widget yang subkelas `Input` menentukan `widget['type']` dan `MultiWidget` menentukan `widget['subwidgets']` untuk tujuan perulangan.

## Menimpa cetakan widget siap-pakai

Setiap widget mempunyai sebuah atribut `template_name` dengan sebuah nilai seperti `input.html`. Cetakan widget siap-pakai disimpan dalam jalur `django/forms/widgets`. Anda dapat menyediakan cetakan penyesuaian untuk `input.html` dengan menentukan `django/forms/widgets/input.html`, sebagai contoh. Lihat Widget pasang tetap untuk nama dari setiap cetakan widget.

Untuk menimpa cetakan widget, anda harus menggunakan pembangun `TemplatesSetting`. Kemudian menimpa cetakan widget bekerja the same as menimpa cetakan lain apapun dalam proyek anda.