Muh*_*uri 4 html python django
我想要一个 Django 表单字段呈现为:
<input type="text" name="username" required>
Run Code Online (Sandbox Code Playgroud)
但当我尝试时username.widget.attrs['required'] = ''我得到类似的东西:
<input type="text" name="username" required="">
Run Code Online (Sandbox Code Playgroud)
required有没有一种方法可以在生成的 HTML 表单中显示独立的 HTML5 属性?
我在 Python 2.6 上使用 Django 1.6,因为它的价值。
您需要以required有效的格式定义属性。
username.widget.attrs['required'] = 'required'
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解更多详细信息: /sf/answers/210908281/
@mariodev 是正确的。如果您想要更优雅的方式来执行此操作,请参阅/sf/answers/2641717991/(相关部分复制如下):
如果你真的想编写优雅、DRY 的代码,你应该创建一个基本表单类,动态查找所有必需的字段并为你修改它们的小部件所需属性(你可以将其命名为任何你想要的名称,但“BaseForm”似乎很合适) :
from django.forms import ModelForm
class BaseForm(ModelForm):
def __init__(self, *args, **kwargs):
super(BaseForm, self).__init__(*args, **kwargs)
for bound_field in self:
if hasattr(bound_field, "field") and bound_field.field.required:
bound_field.field.widget.attrs["required"] = "required"
Run Code Online (Sandbox Code Playgroud)
然后让所有 Form 对象都从它下降:
class UserForm(BaseForm):
class Meta:
model = User
fields = []
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
email = forms.EmailField(required=True, max_length=100)
Run Code Online (Sandbox Code Playgroud)