:canonical: archivebox.base_models.admin.KeyValueWidget
Bases: {py:obj}`django.forms.Widget`
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget
```
```{rubric} Initialization
```
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget.__init__
```
````{py:attribute} template_name
:canonical: archivebox.base_models.admin.KeyValueWidget.template_name
:value: >
None
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget.template_name
```
````
`````{py:class} Media
:canonical: archivebox.base_models.admin.KeyValueWidget.Media
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget.Media
```
````{py:attribute} css
:canonical: archivebox.base_models.admin.KeyValueWidget.Media.css
:value: >
None
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget.Media.css
```
````
````{py:attribute} js
:canonical: archivebox.base_models.admin.KeyValueWidget.Media.js
:value: >
[]
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget.Media.js
```
````
`````
````{py:method} _get_config_options()
:canonical: archivebox.base_models.admin.KeyValueWidget._get_config_options
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget._get_config_options
```
````
````{py:method} render(name, value, attrs=None, renderer=None)
:canonical: archivebox.base_models.admin.KeyValueWidget.render
````
````{py:method} _render_row(widget_id, idx, key, value)
:canonical: archivebox.base_models.admin.KeyValueWidget._render_row
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget._render_row
```
````
````{py:method} _escape(s)
:canonical: archivebox.base_models.admin.KeyValueWidget._escape
```{autodoc2-docstring} archivebox.base_models.admin.KeyValueWidget._escape
```
````
````{py:method} value_from_datadict(data, files, name)
:canonical: archivebox.base_models.admin.KeyValueWidget.value_from_datadict
````