Django表单在单个HTML中多次使用,避免重复的id

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django表单在单个HTML中多次使用,避免重复的id相关的知识,希望对你有一定的参考价值。

Python 3.6.3,Django 1.11.8,Chrome版本63.0.3239.108(官方版本)(64位)

我有一个创建项目表单。在html代码中添加了多个模态。

我在表单类中使用了prefix属性,这可以避免来自其他表单相同名称字段的重复ID。

但是如何处理由单个html中多次使用的一个表单创建的同名多个ID?

form.朋友

class CreateProjectForm(forms.ModelForm):
    prefix = 'create_project'
    class Meta:
        model = Project
        fields = ['project_name', 'project_type', 'description']
        widgets = {'description': forms.TextInput(attrs={'placeholder': 'description'})}

我的表格工作正常。但我一直在Chrome Developer控制台中收到此错误:

[DOM] Found 2 elements with non-unique id #id_create_project-description:  <input type=​"text" name=​"create_project-description" placeholder=​"description" maxlength=​"200" id=​"id_create_project-description">​ <input type=​"text" name=​"create_project-description" placeholder=​"description" maxlength=​"200" id=​"id_create_project-description">​
(index):1 [DOM] Found 2 elements with non-unique id #id_create_project-project_name: <input type=​"text" name=​"create_project-project_name" maxlength=​"50" required id=​"id_create_project-project_name">​ <input type=​"text" name=​"create_project-project_name" maxlength=​"50" required id=​"id_create_project-project_name">​
(index):1 [DOM] Found 2 elements with non-unique id #id_create_project-project_type: <select name=​"create_project-project_type" required id=​"id_create_project-project_type">​…​</select>​ <select name=​"create_project-project_type" required id=​"id_create_project-project_type">​…​</select>​

enter image description here

答案

您有两种选择:

  1. 在视图中创建单独的表单实例,每个实例都有不同的prefixf1 = CreateProjectForm(prefix='f1') f2 = CreateProjectForm(prefix='f2') 然后单独渲染每个表单 - 前缀将确保它们具有唯一ID。
  2. 如果由于某种原因你想要使用相同的表单类,或者不知道你将渲染多少个实例,那么你可以render the form manually并省略ID或使用一些外部逻辑来确定ID的前缀。

以上是关于Django表单在单个HTML中多次使用,避免重复的id的主要内容,如果未能解决你的问题,请参考以下文章

使用单独的输入在表单上上传 2 个单个文件:Django

如何避免表单重复提交

在 django 中处理单个 html 表单的多个输入值

在画布中多次旋转一行

避免在 Django 模板 HTML 表中出现重复的“if 条件”

django jquery 评论表单发布太多次