Django中如何正确重写input_option.html表单部件模板
Django 自定义重写
input_option.html模板问题解答 forms/templates/django/forms/widgets/input_option.html是Django表单单选、多选控件选项的内置渲染模板,原生支持自定义重写,重写不生效均为路径配置、加载顺序不符合Django模板加载规则导致。
正确重写实现方式
- 配置符合规则的模板存放路径
自定义模板必须严格复刻内置模板的相对路径结构,有两种可选存放位置:- 项目全局模板目录:如果
settings.py中TEMPLATES配置的DIRS包含项目全局模板目录(通常为BASE_DIR / 'templates'),则将自定义模板放在<全局模板根目录>/django/forms/widgets/input_option.html路径下即可。 - 自有App模板目录:如果要将自定义模板放在某个自有App的templates目录下,需要将模板放在
<App目录>/templates/django/forms/widgets/input_option.html路径下,同时保证该App在INSTALLED_APPS中的注册顺序排在django.forms之前——Django模板加载按INSTALLED_APPS注册顺序遍历查找,先匹配到的模板会被优先使用,若django.forms排在前面会直接加载内置模板,自定义模板不会生效。
- 项目全局模板目录:如果
- 校验模板渲染器配置
检查settings.py中的FORM_RENDERER配置,默认值为"django.forms.renderers.DjangoTemplates"时,上述路径配置可以正常生效;如果自定义了其他渲染器,需要对应调整模板扫描路径,确保渲染器能找到你存放的自定义模板。 - 重启服务验证
开发环境下修改模板后如果开启了模板缓存,需要重启Django开发服务,强制刷新页面后即可看到修改效果。
常见重写不生效的原因
- 路径层级错误:未创建
django这一层级目录,直接将模板放在templates/forms/widgets/路径下,无法匹配模板查找规则 - 文件名拼写错误:出现单词拼写错误、连字符/下划线用错、后缀名错误等问题,比如将文件命名为
input_options.html、input-option.html - 配置顺序错误:放在App目录下的自定义模板,所属App注册顺序晚于
django.forms,导致内置模板被优先加载 - 缓存问题:开启模板缓存后未重启服务,加载的还是旧的缓存模板内容
内容的提问来源于stack exchange,提问作者fleys
相关产品推荐
相关产品推荐

