如何在自定义 django 表单中隐藏 django 标签?

Posted

技术标签:

【中文标题】如何在自定义 django 表单中隐藏 django 标签?【英文标题】:How can I hide a django label in a custom django form? 【发布时间】:2012-09-17 20:18:06 【问题描述】:

我有一个自定义表单,可以创建一个字段的隐藏输入:

class MPForm( forms.ModelForm ):
    def __init__( self, *args, **kwargs ):
        super(MPForm, self).__init__( *args, **kwargs )
        self.fields['mp_e'].label = "" #the trick :)

class Meta:
    model = MeasurementPoint
    widgets =  'mp_e': forms.HiddenInput()  
    exclude = ('mp_order') 

我必须做这个小技巧来“隐藏”标签,但我想做的是将它从表单中删除。我创建这样的表单:

forms.MPForm()

【问题讨论】:

顺便说一句,不要忘记 exclude 元组中的尾随逗号。应该是exclude = ('mp_order',) 【参考方案1】:

我不建议删除标签,因为它会使表单无法访问。您可以在现场使用add a custom CSS class,并在您的 CSS 中使用make that class invisible。

编辑

我错过了输入是隐藏的,所以可访问性不是问题。

您可以直接在模板中呈现表单字段:

<form ...>
    % for field in form.hidden_fields %
         field 
    % endfor %

    % for field in form.visible_fields %
         field.label   field 
    % endfor %
</form>

【讨论】:

它只是一个控件隐藏输入,我不需要标签,我将这个隐藏输入用作令牌。 好吧,我错过了该字段是隐藏字段。对不起,我会编辑上面的答案。 我认为这是最好的方法,但他们应该实现一种删除表单中标签的方法......谢谢! 也适用于 Django 2.0。 这不能回答 IMO 的问题【参考方案2】:

现在,(我的django版本是2.1.4),可以这样解决->编辑forms.py文件:

password = forms.CharField(label=False)

【讨论】:

【参考方案3】:

如果您使用form.as_pform.as_table 方法,Django 无论如何都不应该显示隐藏字段的标签,因此无需更改__init__ 方法中的标签。

 form.as_table 

如果你是customizing the form template,可以使用field.is_hidden属性检查字段是否隐藏。

% if field.is_hidden %
   # Don't render label #
% endif %

或者,您可以loop over hidden and visible fields separately,并省略隐藏字段的标签。

【讨论】:

问题是我想在没有任何自定义的情况下使用表单,只是在 form.py 中更改内容,但看起来不可能这样做 正如我上面所说,默认情况下,Django 不会显示隐藏字段的标签。您无需更改 __init__ 方法中的标签。如果标签正在显示,那么您正在您的视图或模板中执行一些您未包含在问题中的操作。【参考方案4】:

你需要给 False 并且它会起作用:

self.fields['mp_e'].label = False

django 版本:2.2

【讨论】:

它不起作用,你正在为标签设置一个新值 如 ziyad akmal 所述,您需要在表单定义中的“标签”选项中添加 False(查看 forms.py)【参考方案5】:

我发现这很有用,对我有用!

class CustomForm(forms.Form):
class Meta:
    ...  #other properties such as model, fields, widgets and help text
    labels = 
       'comment' : '',
    

【讨论】:

【参考方案6】:

转到您的 forms.py 文件并 添加标签=假

作为 下面

name = forms.CharField(required=True, max_length=100, widget=forms.TextInput(attrs='placeholder': 'Enter Name *'), label=False)

【讨论】:

label=False 将 False 打印为标签。这不会隐藏标签名称【参考方案7】:

除非我误解了您的问题,否则您只需将 mp_e 字段添加到元类下的排除元组中。这不是你需要的吗?

class MPForm( forms.ModelForm ):
    def __init__( self, *args, **kwargs ):
        super(MPForm, self).__init__( *args, **kwargs )

    class Meta:
        model = MeasurementPoint
        exclude = ('mp_order','mp_e')  

【讨论】:

不,我需要一个隐藏的输入,我不需要的是它前面的标签。

以上是关于如何在自定义 django 表单中隐藏 django 标签?的主要内容,如果未能解决你的问题,请参考以下文章

Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

在自定义 Django 表单中验证和显示错误

模板和隐藏输入中的自定义 Django 表单

如何根据 Django 下拉菜单中的选择显示和隐藏表单字段

如何在自定义仪表板中显示 django 角色和权限

如何在自定义类中隐藏迭代器和容器实现(无增强)