django crispy forms pygrunn

Upload: walter-angolar-da-silva

Post on 01-Mar-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Django Crispy Forms Pygrunn

    1/70

    django-crispy-forms

    Miguel Araujo

    @maraujop

    http://github.com/maraujophttp://github.com/maraujop
  • 7/25/2019 Django Crispy Forms Pygrunn

    2/70

    Django forms

  • 7/25/2019 Django Crispy Forms Pygrunn

    3/70

    Django forms

    form.as_ul

    form.as_p

    form.as_table

  • 7/25/2019 Django Crispy Forms Pygrunn

    4/70

    Django forms

    class ExampleForm(forms.Form):

    username = forms.CharField()

    email = forms.CharField()

  • 7/25/2019 Django Crispy Forms Pygrunn

    5/70

    Django forms

    {{ example_form.as_ul }}

    Username:

    Email:

  • 7/25/2019 Django Crispy Forms Pygrunn

    6/70

    How about divs?

  • 7/25/2019 Django Crispy Forms Pygrunn

    7/70

    Reorder elds?

  • 7/25/2019 Django Crispy Forms Pygrunn

    8/70

    Django forms

    Moving chunks of code

    class ExampleForm(forms.Form):email = forms.CharField()

    username = forms.CharField()

  • 7/25/2019 Django Crispy Forms Pygrunn

    9/70

    class ExampleForm(forms.Form):email = forms.CharField()

    username = forms.CharField()

    class ExampleForm(forms.Form):username = forms.CharField()

    email = forms.CharField()

    Django forms

    Moving chunks of code

  • 7/25/2019 Django Crispy Forms Pygrunn

    10/70

    Django forms

    Make comment the rst eld?

    class ExampleForm(forms.Form):email = forms.CharField()

    username = forms.CharField()

    class ExtraFieldForm(ExampleForm):comment = forms.CharField()

  • 7/25/2019 Django Crispy Forms Pygrunn

    11/70

    Django forms

    self.elds is a SortedDict

    self.elds.keyOrder is a list ['username', 'email', 'comment']

    class ExtraFieldForm(ExampleForm):comment = forms.CharField()

    def__init__(self, *args, **kwargs):

    super(ExtraFieldForm, self).__init__(*args, **kwargs)

    self.elds.keyOrder = ['comment', 'email', 'username']

  • 7/25/2019 Django Crispy Forms Pygrunn

    12/70

    Django forms

    What if I have 100 elds?

    class ExtraFieldForm(ExampleForm):

    comment = forms.CharField()

    def__init__(self, *args, **kwargs):super(ExtraFieldForm, self).__init__(*args, **kwargs)

    self.elds.keyOrder.remove('comment')

    self.elds.keyOrder.insert(0, 'comment')

  • 7/25/2019 Django Crispy Forms Pygrunn

    13/70

    Django ModelForms

    ModelForms are different, why?

    class ExampleForm(forms.ModelForm):class Meta:

    model = ExampleModel

    elds = ('username', 'email')

  • 7/25/2019 Django Crispy Forms Pygrunn

    14/70

    Customize outpu

  • 7/25/2019 Django Crispy Forms Pygrunn

    15/70

    Asteriks for required elds

    {% for eld in form %}{{ eld }} {% ifeld.eld.required %}(*){% endif%}

    {% endfor %}

  • 7/25/2019 Django Crispy Forms Pygrunn

    16/70

    Asteriks for required elds

    {% for eld in form %}{{ eld }} {% ifeld.eld.required %}(*){% endif%}

    {% endfor %}

    What about eld.errors ?

    What about form.non_eld_errors ?

    etc.

  • 7/25/2019 Django Crispy Forms Pygrunn

    17/70

    Something morecomplex?

  • 7/25/2019 Django Crispy Forms Pygrunn

    18/70

  • 7/25/2019 Django Crispy Forms Pygrunn

    19/70

    django-crispy-forms

    Formerly known as django-uni-form, created by Daniel Greenfeld

    @pydanny in 2008

    I joined the project in the middle of 2010 and became lead developer

    38 contributors

    Tested and thoroughly used

    Two template packs: bootstrap & uni_form CRISPY_TEMPLATE_PACK

    http://github.com/pydannyhttp://github.com/pydanny
  • 7/25/2019 Django Crispy Forms Pygrunn

    20/70

    django-crispy-forms

    A lter |crispy

    A tag {% crispy %}

    They work on forms, modelforms and formsets

  • 7/25/2019 Django Crispy Forms Pygrunn

    21/70

    |crispy lter

    Easy div format

    No need to change form code at all

    {% load crispy_forms_tags %}

    {{ example_form|crispy }}

  • 7/25/2019 Django Crispy Forms Pygrunn

    22/70

    Django forms

    {{ example_form|crispy }}

    Username*

  • 7/25/2019 Django Crispy Forms Pygrunn

    23/70

  • 7/25/2019 Django Crispy Forms Pygrunn

    24/70

    {% crispy %} tag

    I don't like writing HTML for forms

    I need customization power

    They need to be as DRY as possible

  • 7/25/2019 Django Crispy Forms Pygrunn

    25/70

    {% crispy %} tag

    {% crispy form [helper] %}

    {% crispy example_form %}

    Username*