{"title":"The form rendering API","version":"6.0","locale":"ko","docname":"ref/forms/renderers","url":"/ko/6.0/ref/forms/renderers/","canonical":"https://djangodocs.dev/ko/6.0/ref/forms/renderers/","summary":"Django’s form widgets are rendered using Django’s template engines system . The form rendering process can be customized at several levels: Widgets can specify…","html":"<span id=\"the-form-rendering-api\"></span><h1>The form rendering API<a class=\"heading-anchor\" href=\"#module-django.forms.renderers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django’s form widgets are rendered using Django’s <a class=\"reference internal\" href=\"/ko/6.0/topics/templates/\"><span class=\"doc\">template engines\nsystem</span></a>.</p>\n<p>The form rendering process can be customized at several levels:</p>\n<ul class=\"simple\">\n<li><p>Widgets can specify custom template names.</p></li>\n<li><p>Forms and widgets can specify custom renderer classes.</p></li>\n<li><p>A widget’s template can be overridden by a project. (Reusable applications\ntypically shouldn’t override built-in templates because they might conflict\nwith a project’s custom templates.)</p></li>\n</ul>\n<section id=\"the-low-level-render-api\">\n<span id=\"low-level-widget-render-api\"></span><h2>The low-level render API<a class=\"heading-anchor\" href=\"#the-low-level-render-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The rendering of form templates is controlled by a customizable renderer class.\nA custom renderer can be specified by updating the <a class=\"reference internal\" href=\"/ko/6.0/ref/settings/#std-setting-FORM_RENDERER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FORM_RENDERER</span></code></a>\nsetting. It defaults to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code><a class=\"reference internal\" href=\"#django.forms.renderers.DjangoTemplates\" title=\"django.forms.renderers.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.forms.renderers.DjangoTemplates</span></code></a><code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code>.</p>\n<p>By specifying a custom form renderer and overriding\n<a class=\"reference internal\" href=\"#django.forms.renderers.BaseRenderer.form_template_name\" title=\"django.forms.renderers.BaseRenderer.form_template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">form_template_name</span></code></a> you can adjust the default form\nmarkup across your project from a single place.</p>\n<p>You can also provide a custom renderer per-form or per-widget by setting the\n<a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.Form.default_renderer\" title=\"django.forms.Form.default_renderer\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.default_renderer</span></code></a> attribute or by using the <code class=\"docutils literal notranslate\"><span class=\"pre\">renderer</span></code> argument\nof <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.Form.render\" title=\"django.forms.Form.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.render()</span></code></a>, or <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/widgets/#django.forms.Widget.render\" title=\"django.forms.Widget.render\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Widget.render()</span></code></a>.</p>\n<p>Matching points apply to formset rendering. See <a class=\"reference internal\" href=\"/ko/6.0/topics/forms/formsets/#formset-rendering\"><span class=\"std std-ref\">Using a formset in views and templates</span></a> for\ndiscussion.</p>\n<p>Use one of the <a class=\"reference internal\" href=\"#built-in-template-form-renderers\"><span class=\"std std-ref\">built-in template form renderers</span></a> or implement your own. Custom renderers\nmust implement a <code class=\"docutils literal notranslate\"><span class=\"pre\">render(template_name,</span> <span class=\"pre\">context,</span> <span class=\"pre\">request=None)</span></code> method. It\nshould return a rendered template (as a string) or raise\n<a class=\"reference internal\" href=\"/ko/6.0/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">TemplateDoesNotExist</span></code></a>.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">BaseRenderer</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The base class for the built-in form renderers.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.form_template_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">form_template_name</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.form_template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The default name of the template to use to render a form.</p>\n<p>Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/div.html&quot;</span></code> template.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.formset_template_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">formset_template_name</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.formset_template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The default name of the template to use to render a formset.</p>\n<p>Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/formsets/div.html&quot;</span></code> template.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.field_template_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">field_template_name</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.field_template_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>The default name of the template used to render a <code class=\"docutils literal notranslate\"><span class=\"pre\">BoundField</span></code>.</p>\n<p>Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;django/forms/field.html&quot;</span></code></p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.bound_field_class\">\n<span class=\"sig-name descname\"><span class=\"pre\">bound_field_class</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.bound_field_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>The default class used to represent form fields across the project.</p>\n<p>Defaults to <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a> class.</p>\n<p>This can be customized further using <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.Form.bound_field_class\" title=\"django.forms.Form.bound_field_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.bound_field_class</span></code></a>\nfor per-form overrides, or <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/fields/#django.forms.Field.bound_field_class\" title=\"django.forms.Field.bound_field_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.bound_field_class</span></code></a> for\nper-field overrides.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.get_template\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_template</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.get_template\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Subclasses must implement this method with the appropriate template\nfinding logic.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.BaseRenderer.render\">\n<span class=\"sig-name descname\"><span class=\"pre\">render</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">context</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.forms.renderers.BaseRenderer.render\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renders the given template, or raises\n<a class=\"reference internal\" href=\"/ko/6.0/topics/templates/#django.template.TemplateDoesNotExist\" title=\"django.template.TemplateDoesNotExist\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">TemplateDoesNotExist</span></code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"built-in-template-form-renderers\">\n<span id=\"id1\"></span><h2>Built-in-template form renderers<a class=\"heading-anchor\" href=\"#built-in-template-form-renderers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"djangotemplates\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code><a class=\"heading-anchor\" href=\"#djangotemplates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.DjangoTemplates\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">DjangoTemplates</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.DjangoTemplates\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>This renderer uses a standalone\n<a class=\"reference internal\" href=\"/ko/6.0/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a>\nengine (unconnected to what you might have configured in the\n<a class=\"reference internal\" href=\"/ko/6.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> setting). It loads templates first from the built-in form\ntemplates directory in <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.0.x/django/forms/templates\">django/forms/templates</a> and then from the\ninstalled apps’ templates directories using the <a class=\"reference internal\" href=\"/ko/6.0/ref/templates/api/#django.template.loaders.app_directories.Loader\" title=\"django.template.loaders.app_directories.Loader\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">app_directories</span></code></a> loader.</p>\n<p>If you want to render templates with customizations from your\n<a class=\"reference internal\" href=\"/ko/6.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> setting, such as context processors for example, use the\n<a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a> renderer.</p>\n</section>\n<section id=\"jinja2\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Jinja2</span></code><a class=\"heading-anchor\" href=\"#jinja2\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.Jinja2\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Jinja2</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.Jinja2\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>This renderer is the same as the <a class=\"reference internal\" href=\"#django.forms.renderers.DjangoTemplates\" title=\"django.forms.renderers.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a> renderer except that\nit uses a <a class=\"reference internal\" href=\"/ko/6.0/topics/templates/#django.template.backends.jinja2.Jinja2\" title=\"django.template.backends.jinja2.Jinja2\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Jinja2</span></code></a> backend. Templates\nfor the built-in widgets are located in <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.0.x/django/forms/jinja2\">django/forms/jinja2</a> and\ninstalled apps can provide templates in a <code class=\"docutils literal notranslate\"><span class=\"pre\">jinja2</span></code> directory.</p>\n<p>To use this backend, all the forms and widgets in your project and its\nthird-party apps must have Jinja2 templates. Unless you provide your own Jinja2\ntemplates for widgets that don’t have any, you can’t use this renderer. For\nexample, <a class=\"reference internal\" href=\"/ko/6.0/ref/contrib/admin/#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.admin</span></code></a> doesn’t include Jinja2 templates for its\nwidgets due to their usage of Django template tags.</p>\n</section>\n<section id=\"templatessetting\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code><a class=\"heading-anchor\" href=\"#templatessetting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.forms.renderers.TemplatesSetting\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TemplatesSetting</span></span><a class=\"heading-anchor\" href=\"#django.forms.renderers.TemplatesSetting\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>This renderer gives you complete control of how form and widget templates are\nsourced. It uses <a class=\"reference internal\" href=\"/ko/6.0/topics/templates/#django.template.loader.get_template\" title=\"django.template.loader.get_template\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">get_template()</span></code></a> to find templates\nbased on what’s configured in the <a class=\"reference internal\" href=\"/ko/6.0/ref/settings/#std-setting-TEMPLATES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TEMPLATES</span></code></a> setting.</p>\n<p>Using this renderer along with the built-in templates requires either:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'django.forms'</span></code> in <a class=\"reference internal\" href=\"/ko/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> and at least one engine\nwith <a class=\"reference internal\" href=\"/ko/6.0/ref/settings/#std-setting-TEMPLATES-APP_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">APP_DIRS=True</span></code></a>.</p></li>\n<li><p>Adding the built-in templates directory in <a class=\"reference internal\" href=\"/ko/6.0/ref/settings/#std-setting-TEMPLATES-DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DIRS</span></code></a>\nof one of your template engines. To generate that path:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">django</span>\n\n<span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">__path__</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s2\">&quot;/forms/templates&quot;</span>  <span class=\"c1\"># or &#39;/forms/jinja2&#39;</span>\n</code></pre></div>\n</li>\n</ul>\n<p>Using this renderer requires you to make sure the form templates your project\nneeds can be located.</p>\n</section>\n</section>\n<section id=\"context-available-in-formset-templates\">\n<h2>Context available in formset templates<a class=\"heading-anchor\" href=\"#context-available-in-formset-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Formset templates receive a context from <a class=\"reference internal\" href=\"/ko/6.0/topics/forms/formsets/#django.forms.formsets.BaseFormSet.get_context\" title=\"django.forms.formsets.BaseFormSet.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">BaseFormSet.get_context()</span></code></a>. By\ndefault, formsets receive a dictionary with the following values:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">formset</span></code>: The formset instance.</p></li>\n</ul>\n</section>\n<section id=\"context-available-in-form-templates\">\n<h2>Context available in form templates<a class=\"heading-anchor\" href=\"#context-available-in-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Form templates receive a context from <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.Form.get_context\" title=\"django.forms.Form.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Form.get_context()</span></code></a>. By default,\nforms receive a dictionary with the following values:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code>: The bound form.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">fields</span></code>: All bound fields, except the hidden fields.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">hidden_fields</span></code>: All hidden bound fields.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code>: All non field related or hidden field related form errors.</p></li>\n</ul>\n</section>\n<section id=\"context-available-in-field-templates\">\n<h2>Context available in field templates<a class=\"heading-anchor\" href=\"#context-available-in-field-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Field templates receive a context from <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.BoundField.get_context\" title=\"django.forms.BoundField.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">BoundField.get_context()</span></code></a>. By\ndefault, fields receive a dictionary with the following values:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code>: The <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.BoundField\" title=\"django.forms.BoundField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BoundField</span></code></a>.</p></li>\n</ul>\n</section>\n<section id=\"context-available-in-widget-templates\">\n<h2>Context available in widget templates<a class=\"heading-anchor\" href=\"#context-available-in-widget-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Widget templates receive a context from <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/widgets/#django.forms.Widget.get_context\" title=\"django.forms.Widget.get_context\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Widget.get_context()</span></code></a>. By\ndefault, widgets receive a single value in the context, <code class=\"docutils literal notranslate\"><span class=\"pre\">widget</span></code>. This is a\ndictionary that contains values like:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">attrs</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">is_hidden</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code></p></li>\n</ul>\n<p>Some widgets add further information to the context. For instance, all widgets\nthat subclass <code class=\"docutils literal notranslate\"><span class=\"pre\">Input</span></code> defines <code class=\"docutils literal notranslate\"><span class=\"pre\">widget['type']</span></code> and <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/widgets/#django.forms.MultiWidget\" title=\"django.forms.MultiWidget\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiWidget</span></code></a>\ndefines <code class=\"docutils literal notranslate\"><span class=\"pre\">widget['subwidgets']</span></code> for looping purposes.</p>\n</section>\n<section id=\"overriding-built-in-formset-templates\">\n<span id=\"id2\"></span><h2>Overriding built-in formset templates<a class=\"heading-anchor\" href=\"#overriding-built-in-formset-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ko/6.0/topics/forms/formsets/#django.forms.formsets.BaseFormSet.template_name\" title=\"django.forms.formsets.BaseFormSet.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">BaseFormSet.template_name</span></code></a></p>\n<p>To override formset templates, you must use the <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>\nrenderer. Then overriding formset templates works <a class=\"reference internal\" href=\"/ko/6.0/howto/overriding-templates/\"><span class=\"doc\">the same as</span></a> overriding any other template in your project.</p>\n</section>\n<section id=\"overriding-built-in-form-templates\">\n<span id=\"id3\"></span><h2>Overriding built-in form templates<a class=\"heading-anchor\" href=\"#overriding-built-in-form-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ko/6.0/ref/forms/api/#django.forms.Form.template_name\" title=\"django.forms.Form.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Form.template_name</span></code></a></p>\n<p>To override form templates, you must use the <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>\nrenderer. Then overriding form templates works <a class=\"reference internal\" href=\"/ko/6.0/howto/overriding-templates/\"><span class=\"doc\">the same as</span></a> overriding any other template in your project.</p>\n</section>\n<section id=\"overriding-built-in-field-templates\">\n<span id=\"id4\"></span><h2>Overriding built-in field templates<a class=\"heading-anchor\" href=\"#overriding-built-in-field-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ko/6.0/ref/forms/fields/#django.forms.Field.template_name\" title=\"django.forms.Field.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.template_name</span></code></a></p>\n<p>To override field templates, you must use the <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>\nrenderer. Then overriding field templates works <a class=\"reference internal\" href=\"/ko/6.0/howto/overriding-templates/\"><span class=\"doc\">the same as</span></a> overriding any other template in your project.</p>\n</section>\n<section id=\"overriding-built-in-widget-templates\">\n<span id=\"id5\"></span><h2>Overriding built-in widget templates<a class=\"heading-anchor\" href=\"#overriding-built-in-widget-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Each widget has a <code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> attribute with a value such as\n<code class=\"docutils literal notranslate\"><span class=\"pre\">input.html</span></code>. Built-in widget templates are stored in the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django/forms/widgets</span></code> path. You can provide a custom template for\n<code class=\"docutils literal notranslate\"><span class=\"pre\">input.html</span></code> by defining <code class=\"docutils literal notranslate\"><span class=\"pre\">django/forms/widgets/input.html</span></code>, for example.\nSee <a class=\"reference internal\" href=\"/ko/6.0/ref/forms/widgets/#built-in-widgets\"><span class=\"std std-ref\">Built-in widgets</span></a> for the name of each widget’s template.</p>\n<p>To override widget templates, you must use the <a class=\"reference internal\" href=\"#django.forms.renderers.TemplatesSetting\" title=\"django.forms.renderers.TemplatesSetting\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemplatesSetting</span></code></a>\nrenderer. Then overriding widget templates works <a class=\"reference internal\" href=\"/ko/6.0/howto/overriding-templates/\"><span class=\"doc\">the same as</span></a> overriding any other template in your project.</p>\n</section>","rootId":"module-django.forms.renderers","toc":[{"title":"The low-level render API","anchor":"the-low-level-render-api","children":[]},{"title":"Built-in-template form renderers","anchor":"built-in-template-form-renderers","children":[{"title":"DjangoTemplates","anchor":"djangotemplates","children":[]},{"title":"Jinja2","anchor":"jinja2","children":[]},{"title":"TemplatesSetting","anchor":"templatessetting","children":[]}]},{"title":"Context available in formset templates","anchor":"context-available-in-formset-templates","children":[]},{"title":"Context available in form templates","anchor":"context-available-in-form-templates","children":[]},{"title":"Context available in field templates","anchor":"context-available-in-field-templates","children":[]},{"title":"Context available in widget templates","anchor":"context-available-in-widget-templates","children":[]},{"title":"Overriding built-in formset templates","anchor":"overriding-built-in-formset-templates","children":[]},{"title":"Overriding built-in form templates","anchor":"overriding-built-in-form-templates","children":[]},{"title":"Overriding built-in field templates","anchor":"overriding-built-in-field-templates","children":[]},{"title":"Overriding built-in widget templates","anchor":"overriding-built-in-widget-templates","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 레퍼런스","url":"/ko/6.0/ref/"},{"docname":"ref/forms/index","title":"양식","url":"/ko/6.0/ref/forms/"}],"prev":{"docname":"ref/forms/formsets","title":"Formset Functions","url":"/ko/6.0/ref/forms/formsets/"},"next":{"docname":"ref/forms/widgets","title":"Widgets","url":"/ko/6.0/ref/forms/widgets/"},"formats":{"html":"/ko/6.0/ref/forms/renderers/","markdown":"/ko/6.0/ref/forms/renderers.md","json":"/ko/6.0/ref/forms/renderers.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/forms/renderers.txt","official":"https://docs.djangoproject.com/ko/6.0/ref/forms/renderers/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}