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.

Reply via email to