Re: [django-cs] Stylování formulářů

2014-07-15 Thread Jan Walter

Díky moc Vám všem za inspiraci.
Po osahání jsem zvolil cestu vlastních mikrošablon, které se hodí pro 
náš projekt.


Floppy vypadá sympaticky, ale protože dědíme od formulářů 
django.contrib.auth.forms (a ne přímo z django.forms), nebyl by přechod 
úplně hladký.


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.


Re: [django-cs] Stylování formulářů

2014-07-07 Thread Jan Češpivo
Ahoj,
vzhledem k tomu, že úprava formulářových polí je častěji věc html a css
kodérů, tak se nám jako nejlepší řešení osvědčil inclusion tag "formfield"
s vlastní šablonou, kde si šablonáři mohou upravovat téměř vše, co
potřebují. Často totiž potřebují nahrazovat formulářové prvky různými divy
a​ spany, přidávat třídy a navazovat javascripty, takže se jim tahle
volnost poměrně dost zalíbila.

Tag formfield kromě povinného parametru field, bere např. textové parametry
container_tag a boolean parametry no_container, no_label, hide_colon,
tabindex atd. Do šablony se pak přidává kromě samotného fieldu a vstupních
parametrů kontext is_checkbox is_textarea ..., readonly, disabled, errors,
required, help_text, label, input_classes apod.

Celé toto řešení je v konkrétních případech upravováno dle potřeby,
obecnost je zachována pouze v rámci projektu. Berte to tedy, prosím, jako
návrhový vzor, ne snippet "ready to use".

Honza Č.

-- 
-- 
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.


Re: [django-cs] Stylování formulářů

2014-07-07 Thread Martin Tirsel

Ahoj,

ja som s formularmi skoncil u takehoto riesenia (vlastny snippet na 
rendering formulara, v tomto pripade urcene na pouzitie s bootstrap 3):


https://gist.github.com/mtirsel/4d8f81dd0403ad978cf8

Nieco taketo kopirujem z projektu do projektu a ak potrebujem nieco 
nestandardne, skopirujem, upravim, ulozim novy snippet a includnem. Ak 
potrebujem nejaky extra styll (comu sa snazim vyhnut, formulare by mali 
byt v idealnom pripade vsade rovnake, ale z casu na cas sa inak neda), 
tak staci v html sablone FORM elementu pridat nejaku class (napr. 
mycustomform) a potom uz viem v CSS lepsie cielit:


form.mycustomform input[type=text] {...}

Toto riesenie mi pride celkom flexibilne, s drobnymi upravami pokryjem 
vacsinu potrieb.


Martin


On 07/07/2014 09:02 AM, Jan Walter wrote:

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  
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.


Re: [django-cs] Stylování formulářů

2014-07-07 Thread Tomas Ehrlich
TLDR: Je to peklo.

Existuje několik packages, které to nějakým způsobem řeší:

- django-crispy-forms (https://github.com/maraujop/django-crispy-forms)
  Můžeš si definovat libovolný layout, třídy, ... Problém je v tom, že
  se vše definuje v pythonu, přímo u definice formuláře.

- django-widget-tweaks (https://github.com/kmike/django-widget-tweaks)
  Celkem fajn, jednoduše můžeš přidat fieldům atributy, které potřebuješ.
  Problém je, že je pak z toho docela hnusný a nepřehledný kód, ale dá se.

- django-floppy-forms (https://github.com/brutasse/django-floppyforms)
  Zajímavá myšlenky, ale ještě nikdy jsem to nepoužil v praxi. Můžeš
  si definovat šablony pro různé widgety (defaultně je html výstup
  každého widgetu zapečen přímo v Django kódu)

Osobně jsem se snažil ten problém vyřešit v django-forme
(https://github.com/elvard/django-forme), ale zasekl jsem se a nemám
teď na to moc času.


Často jsem to řešil tak, že jsem si udělal společnou šablonu pro běžný input:

# templates/forms/bootstrap_field.html

  {{ field.label 
}}
  

{% if field.help_text %}
  {{ field.help_text }}
{% endif %}
{% if field.errors %}
  
{% for error in field.errors %}
  {{ error }}
{% endfor %}
  
{% endif %}
  


a tu potom includoval ve formuláři pomocí:

{% include "forms/bootstrap_field.html" field=form.username %}

a když jsem někdy musel změnit jeden field, tak... jsem to natvrdo vložil
do šablony. Prostě peklo.


Jinak mrkni na dokumentaci k formulářům, konkrétně na atributy fieldů:
https://docs.djangoproject.com/en/dev/topics/forms/#looping-over-the-form-s-fields

Můžeš si pak vyrenderovat input ručně a přitom "zachovat vazbu na model", např:


Definici společných atributů bych řešil nejspíš upraveným widgetem...


Na závěr: Existují guru, kteří použijí {{ form }} a zbytek řeší v CSS.
Závidím jim jejich život :)


Tom


Dne Mon, 07 Jul 2014 09:02:44 +0200
Jan Walter  napsal(a):

> 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  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.


Re: [django-cs] Stylování formulářů

2014-07-07 Thread starenka .
Cau!

co takle flopace? tam to jde jak v py, tak v sablone docela elegantne (imo)

http://django-floppyforms.readthedocs.org/en/latest/customization.html

http://django-floppyforms.readthedocs.org/en/latest/templatetags.html#field

s

--
aknerats[::-1]
On Jul 7, 2014 9:04 AM, "Jan Walter"  wrote:

> 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  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.
>

-- 
-- 
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.


[django-cs] Stylování formulářů

2014-07-07 Thread Jan Walter

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  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.