===============
Usage: Tags
===============

Using the templatetag in your view (Intermediate)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. In your views.py add the following after field definitions::

    from django.shortcuts import render_to_response
    
    from uni_form.helpers import FormHelper, Submit, Reset
    from my_project.forms.MyForm
    
    def my_view(request):
    
        # Create the form
        form = MyForm() 
    
        # create a formHelper
        helper = FormHelper()
        
        # Add in a class and id
        helper.form_id = 'this-form-rocks'
        helper.form_class = 'search'
        
        # add in a submit and reset button
        submit = Submit('search','search this site')
        helper.add_input(submit)
        reset = Reset('reset','reset button')                
        helper.add_input(reset)
        
        # create the response dictionary
        response_dictionary = {'form':form, 'helper': helper}
        
        return render_to_response('my_template.html', response_dictionary)
        
2. In your template do the following::

    {% load uni_form_tags %}
    
    {% uni_form form helper %}

    
Using the templatetag to change action/method (Intermediate)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. In your view class add the following::

    from django.shortcuts import render_to_response

    from uni_form.helpers import FormHelper, Submit, Reset
    from my_project.forms.MyForm

    def my_view(request):

        # Create the form
        form = MyForm() 

        # create a formHelper
        helper = FormHelper()

        # Change the form and method
        helper.form_action = 'my-url-name-defined-in-url-conf'
        helper.form_method = 'GET' # Only GET and POST are legal
        
        # add in a submit and reset button
        submit = Submit('search','search this site')
        helper.add_input(submit)

        # create the response dictionary
        response_dictionary = {'form':form, 'helper': helper}

        return render_to_response('my_template.html', response_dictionary)        
        
2. In your template do the following::

    {% load uni_form_tags %}
    {% uni_form form helper %}


Adding a layout to your form class (Intermediate)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. warning:: Because helpers attached to form objects are  singletons, we are changing the documentation to encourage not doing it as listed in this example.

Uniform helpers can use layout objects. A layout can consist of fieldsets, rows, columns, HTML and fields. A simple Example::

    from django import forms
    
    from uni_form.helpers import FormHelper, Submit, Reset
    from uni_form.helpers import Layout, Fieldset, Row, HTML
	
    class LayoutTestForm(forms.Form):

        is_company = forms.CharField(label="company", required=False, widget=forms.CheckboxInput())    
        email = forms.CharField(label="email", max_length=30, required=True, widget=forms.TextInput())        
        password1 = forms.CharField(label="password", max_length=30, required=True, widget=forms.PasswordInput())
        password2 = forms.CharField(label="re-enter password", max_length=30, required=True, widget=forms.PasswordInput())    
        first_name = forms.CharField(label="first name", max_length=30, required=True, widget=forms.TextInput())        
        last_name = forms.CharField(label="last name", max_length=30, required=True, widget=forms.TextInput())            
    
        # Attach a formHelper to your forms class.
        helper = FormHelper()

        # Create some HTML that you want in the page.
        # Yes, in real life your CSS would be cached, but this is just a simple example.
        style = """
        <style>
            .formRow {
                color: red;
            }
        </style>
    
        """
        # create the layout object
        layout = Layout(
                        # first fieldset shows the company
                        Fieldset('', 'is_company'),
                    
                        # second fieldset shows the contact info
                        Fieldset('Contact details',
                                HTML(style),
                                'email',
                                Row('password1','password2'),
                                'first_name',
                                'last_name',
                                 )
                        )

        helper.add_layout(layout)
                      
        submit = Submit('add','Add this contact')
        helper.add_input(submit)
        
Then, just like in the previous example, add the following to your template::

    {% load uni_form_tags %}
    {% with form.helper as helper %}
        {% uni_form form helper %}
    {% endwith %}
           

This allows you to group fields in fieldsets, or rows or columns or add HTML between fields etc.