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
'
.
By specifying a custom form renderer and overriding
form_template_name
you can adjust the default form
markup across your project from a single place.
You can also provide a custom renderer per-form or per-widget by setting the
Form.default_renderer
attribute or by using the renderer
argument
of Form.render()
, or Widget.render()
.
Matching points apply to formset rendering. See Menggunakan sebuah formset dalam tampilan dan cetakan for discussion.
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
.
-
class
BaseRenderer
¶ The base class for the built-in form renderers.
-
form_template_name
¶ The default name of the template to use to render a form.
Defaults to
"django/forms/div.html"
template.
-
formset_template_name
¶ The default name of the template to use to render a formset.
Defaults to
"django/forms/formsets/div.html"
template.
-
field_template_name
¶ - New in Django 5.0.
The default name of the template used to render a
BoundField
.Defaults to
"django/forms/field.html"
-
get_template
(template_name)¶ Subclasses must implement this method with the appropriate template finding logic.
-
render
(template_name, context, request=None)¶ Renders the given template, or raises
TemplateDoesNotExist
.
-
Pembangun formulir cetakan-siap-pakai¶
DjangoTemplates
¶
-
class
DjangoTemplates
¶
This renderer uses a standalone
DjangoTemplates
engine (unconnected to what you might have configured in the
TEMPLATES
setting). It loads templates first from the built-in form
templates directory in django/forms/templates and then from the
installed apps' templates directories using the app_directories
loader.
Jika anda ingin membangun cetakan dengan penyesuaian dari pengaturan TEMPLATES
anda, seperti pengeolah konteks sebagai contoh, gunakan pembangun TemplatesSetting
.
-
class
DjangoDivFormRenderer
¶
Ditinggalkan sejak versi 5.0.
The alias of DjangoTemplates
.
Jinja2
¶
-
class
Jinja2
¶
This renderer is the same as the DjangoTemplates
renderer except that
it uses a Jinja2
backend. Templates
for the built-in widgets are located in django/forms/jinja2 and
installed apps can provide templates in a jinja2
directory.
To use this backend, all the forms and widgets in your project and its
third-party apps must have Jinja2 templates. Unless you provide your own Jinja2
templates for widgets that don't have any, you can't use this renderer. For
example, django.contrib.admin
doesn't include Jinja2 templates for its
widgets due to their usage of Django template tags.
-
class
Jinja2DivFormRenderer
¶
Ditinggalkan sejak versi 5.0.
The alias of Jinja2
.
TemplatesSetting
¶
-
class
TemplatesSetting
¶
This renderer gives you complete control of how form and widget templates are
sourced. It uses get_template()
to find templates
based on what's configured in the TEMPLATES
setting.
Using this renderer along with the built-in templates requires either:
'django.forms'
inINSTALLED_APPS
dan setidaknya satu mesin denganAPP_DIRS=True
.Adding the built-in templates directory in
DIRS
of one of your template engines. To generate that path:import django django.__path__[0] + "/forms/templates" # or '/forms/jinja2'
Menggunakan pembangun ini membutuhkan anda untuk memastikan cetakan formulir proyek anda butuhkan dapat ditempatkan.
Context available in formset templates¶
Formset templates receive a context from BaseFormSet.get_context()
. By
default, formsets receive a dictionary with the following values:
formset
: The formset instance.
Context available in form templates¶
Form templates receive a context from Form.get_context()
. By default,
forms receive a dictionary with the following values:
form
: The bound form.fields
: All bound fields, except the hidden fields.hidden_fields
: All hidden bound fields.errors
: All non field related or hidden field related form errors.
Context available in field templates¶
Field templates receive a context from BoundField.get_context()
. By
default, fields receive a dictionary with the following values:
field
: TheBoundField
.
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.
Overriding built-in formset templates¶
To override formset templates, you must use the TemplatesSetting
renderer. Then overriding formset templates works the same as overriding any other template in your project.
Overriding built-in form templates¶
To override form templates, you must use the TemplatesSetting
renderer. Then overriding form templates works the same as overriding any other template in your project.
Overriding built-in field templates¶
To override field templates, you must use the TemplatesSetting
renderer. Then overriding field templates works the same as overriding any other template in your project.
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.