【问题标题】:Django: Why does my CharField not get given the class vTextField?Django:为什么我的 CharField 没有得到 vTextField 类?
【发布时间】:2010-01-10 19:36:23
【问题描述】:

我有这样的表格:

class DiaryEventForm(forms.Form):
  title = forms.CharField(max_length = 200)

生成此 HTML:

<input id="id_title" type="text" name="title" maxlength="200" /> 

这在管理中显示为非常狭窄(我有一个使用此表单的自定义视图)。

如果我有这样定义的模型:

class DiaryEvent(BaseModel):
  title = models.CharField(max_length = 200)

我得到了这个 HTML:

<input id="id_title" type="text" class="vTextField" name="title" maxlength="200" />

vTextField 类添加到我的表单中最优雅的方式是什么?该类似乎是普通文本输入的样式,所以我想使用它,而不是自己设置样式。

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    虽然@czarchaic 的回答有效(所以+1),browsing the source 产生了这个解决方案,我更喜欢:

    from django.contrib.admin.widgets import AdminTextInputWidget
    
    class DiaryEventForm(forms.Form):
        title = forms.CharField(max_length = 200, widget = AdminTextInputWidget())
    

    【讨论】:

    • 同样,您可以使用AdminURLFieldWidget 用于URL(甚至更宽)等,来自django.contrib.admin.widgets
    【解决方案2】:

    您可以通过小部件添加属性

     class DiaryEventForm(forms.Form):
      title = forms.CharField(max_length = 200, widget=forms.TextInput(attrs={'class': 'vTextField'}))
    

    【讨论】:

    • 这和@Dominic 的解决方案都很好。对于基于管理员的应用程序,我更喜欢 Dominic's,如果你不想依赖 django.contrib.admin,我更喜欢 czarchaic's。
    【解决方案3】:

    你可以使用这个技巧。

    将您的字段放入带有类的 div 中:

    <div class="vTextField">
    <label>
        {{ form.title }}
    </label>
    </div>
    

    这里是对应的css块:

    .vTextField label{
     your style here
    }
    

    在这种情况下,您不必在 python 中指定样式类

    【讨论】:

    • 我可以,但我不想在我的模板中为此包含代码(这属于问题中的“自己设计样式”附带条件)。
    猜你喜欢
    • 2023-03-05
    • 2020-11-19
    • 2013-07-15
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2019-05-21
    • 2013-08-19
    • 2017-10-30
    相关资源
    最近更新 更多