Contrôle de la taille du widget TextArea dans django admin
j'ai réussi à passer outre l'apparence d'un TextArea
Widget dans l'interface d'administration de django avec deux façons différentes:
utilisant formfield_overrides
dans admin.py
:
class RulesAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': Textarea(
attrs={'rows': 1,
'cols': 40})},
}
...
admin.site.register(Rules, RulesAdmin)
ce chemin est un peu exagéré, car il va changer tout le champ de texte pour que modèle.
avec un formulaire personnalisé:
dans 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}),
}
in admin.py
from AppName.forms import RulesModelForm
class RulesAdmin(admin.ModelAdmin):
form = RulesModelForm
les deux solutions redimensionnent le TextArea
. Toutefois, dans les deux solutions, la taille réelle de la
zone de texte est plus d'une rangée (en fait 2 rangées). Voici à quoi ressemble le HTML rendu:
<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>
Et voici un screentshot:
selon W3C referencnce pour zone de texte :
la taille d'une textarea peut également être spécifiée par les propriétés CSS hauteur et largeur.
donc, mes questions sont:
- est le thème css de django." le comportement de ce widget?
- Peut-On suggérer un moyen de résoudre ce problème?
1 réponses
il s'agit d'un problème propre au navigateur.
selon le fil hauteur de textarea ne correspond pas aux lignes dans Firefox :
Firefox ajoute toujours une ligne supplémentaire après le champ de texte. Si vous le souhaitez pour avoir une hauteur constante, utilisez CSS ...
vous pouvez définir un attribut style
du textarea:
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;'})},
}
Fonctionne pour moi - testé sur Firefox v. 23 et Chrome v. 29.
Espère que ça aide.