如何在Django的ImageField中重命名当前,清除和更改标签

时间:2014-07-31 03:26:50

标签: python django django-models imagefield

我对django比较新。我正在使用ImageForm从用户那里获取图像路径。

class EditProfileForm(ModelForm):
    username = CharField(label='User Name', widget=TextInput(attrs={'class': 'form-control'}), required=True)
    image = ImageField(label='Select Profile Image',required = False)

它显示图像小部件如下:

enter image description here

我想重命名标签 - 目前,清除和更改。 [基本上我的整个页面都不是小写的,所以我想让这些标签文本也是小写的,就像目前的那样,清晰&变化。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

你有很多选择。

使用CSS将文本设为小写可能是艺术性的。

或者您可以在python / django中更改发送到浏览器的文本。

最终,表单字段小部件通过名为render()的函数控制html输出到视图。 “ClearableFileInput”小部件的render()函数使用小部件类中的一些变量。

您可以创建自己的自定义类,为ClearableFileInput类创建子类,并替换您自己的小写文本字符串。即:

from django.forms.widgets import ClearableFileInput

class MyClearableFileInput(ClearableFileInput):
    initial_text = 'currently'
    input_text = 'change'
    clear_checkbox_label = 'clear'

class EditProfileForm(ModelForm):
    image = ImageField(label='Select Profile Image',required = False, widget=MyClearableFileInput)

答案 1 :(得分:1)

解决这个老问题,如果你想要比子类化 ClearableFileInput、创建 widgets.py 文件等更简单的东西。

如果您已经在 ModelForm 文件中子类化 forms.py,只需修改该表单的 __init__()

例如:

class EditProfileForm(ModelForm):
    username = CharField(label='User Name', widget=TextInput(attrs={'class': 'form-control'}), required=True)
    image = ImageField(label='Select Profile Image',required = False)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['image'].widget.clear_checkbox_label = 'clear'
        self.fields['image'].widget.initial_text = "currently"
        self.fields['image'].widget.input_text = "change"