【问题标题】:Control the size TextArea widget look in django admin在 django admin 中控制 TextArea 小部件的大小
【发布时间】:2013-09-15 07:38:06
【问题描述】:

我设法用两种不同的方式覆盖了 django 管理界面中 TextArea 小部件的外观:

使用 formfield_overrides

admin.py:

class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
    models.TextField: {'widget': Textarea(
                       attrs={'rows': 1,
                              'cols': 40})},
}

...
admin.site.register(Rules, RulesAdmin)

这种方式有点矫枉过正,因为它会改变所有的 TextField 型号。

使用自定义表单:

forms.py:

from django.forms import ModelForm, Textarea
from TimePortal.models import Rules


class RulesModelForm(ModelForm):
    class Meta:
        model = Rules
        widgets = {
            'parameters': Textarea(attrs={'cols': 30, 'rows': 1}),
   }

admin.py

from AppName.forms import RulesModelForm

class RulesAdmin(admin.ModelAdmin):

    form = RulesModelForm

两种解决方案都会调整 TextArea 的大小。然而,在这两种解决方案中的实际大小 文本区域超过 1 行(实际上是 2 行)。以下是呈现的 HTML 的样子:

    <div class="form-row field-parameters">
            <div>
                <label for="id_parameters" class="required">Parameters:</label>
                <textarea id="id_parameters" rows="1" cols="30" name="parameters">{}</textarea> 
           <p class="help">Enter a valid Python Dictionary</p>
         </div>
    </div>

这是一个截图:

根据W3C referecnce for text area

文本区域的大小也可以通过 CSS 的 height 和 width 属性来指定。

所以,我的问题是:

  • 是django自己的css主题负责这里的“奇数” 这个小部件的行为?
  • 能否提出解决此问题的方法?

【问题讨论】:

  • 我已经测试了你的代码,它确实有效,向我展示了一个带有 1 个可见行的文本区域,呈现为 &lt;textarea cols="40" id="my_id" name="my_field" rows="1"&gt;...&lt;/textarea&gt;。可能这是浏览器特有的东西吗?

标签: python css django django-admin


【解决方案1】:

这是一个特定于浏览器的问题。

根据线程Height of textarea does not match the rows in Firefox

Firefox 总是在文本字段之后添加一个额外的行。如果你想要的话 要获得恒定的高度,请使用 CSS ...

你可以设置textarea的style属性:

from django.db import models
from django.forms import Textarea

class RulesAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': Textarea(
                           attrs={'rows': 1,
                                  'cols': 40,
                                  'style': 'height: 1em;'})},
    }

适合我 - 在 Firefox v. 23 和 Chrome v. 29 上测试。

希望对您有所帮助。

【讨论】:

  • 感谢formfield_overrides,不知道这个功能=)
  • 但这会改变表单中的所有文本字段,如果我想更改其中的一些呢?
  • 如果您只需要其中一个,您可以在此答案中寻找解决方案:stackoverflow.com/a/37676970/2848256
猜你喜欢
  • 2013-03-05
  • 2012-09-02
  • 1970-01-01
  • 2011-01-06
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
相关资源
最近更新 更多