Drazí odborníci na Django,
byl bych moc rád, pokud byste mě inspirovali vhodným směrem v
následující oblasti. Pro registraci (a další operace s ní související)
uživatele používáme formuláře děděné od tříd z
django.contrib.auth.forms. Potřebuji jim v html definovat nějaké další
atributy (typicky class, placeholder, možná další) a hledám elegantní
způsob, jak to udělat.
Doufám, že z pochopitelných důvodů, to chci dělat v šablonách (css bych
rád držel v html, nikoli v py zdrojáku). Jediný způsob, který vidím, je
zapomenout na {{form.username}} a rovnou vložit <input/> podle potřeby.
Což mi také nepřijde ideální, protože ztrácím vazbu na model. I kdybych
přistoupil na definici v py, nevidím elegantní způdob, jak některé
společné vlastnosti polí formuláře definovat na jednom místě. Můžu v
každé třídě udělat něco jako
username = forms.CharField(
label=_("Username"),
max_length=75,
widget=forms.TextInput(attrs={
'class': 'inp-text',
'placeholder': _('Password')
})
)
nebo
def __init__(self, *args, **kwargs):
super(MyAuthenticationForm, self).__init__(*args, **kwargs)
for field in self.fields.itervalues():
widget = field.widget
if isinstance(widget, forms.TextInput):
widget.attrs['class'] = 'inp-text'
widget.attrs['placeholder'] = field.label
ale to se mi nelíbí, budu mít hodně redundantního kódu.
Napadlo mě vytvoření Mixin třídy nebo dekorátoru, který by uměl polím
různých tříd vnutit atributy jednotně, ale nedotáhl jsem to, nejsem
přesvědčen o schůdnosti takového řešení.
Možná řeším něco, co je v rozporu s filosofií Djanga (chci modifikovat
něco, co má fungovat standardně), hledám teď nejlepší způsob, jak
nasadit hotové ostylované šablony dodané zvenku.
Díky za jakýkoli hint,
John
--
--
E-mailová skupina django-cs@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete
e-mail na adresu django-cs+unsubscr...@googlegroups.com.
Další možnosti najdete na adrese https://groups.google.com/d/optout.