@register.tag(name="<STR_LIT>")<EOL>def do_uni_form(parser, token):
token = token.split_contents()<EOL>form = token.pop(<NUM_LIT:1>)<EOL>helper = None<EOL>template_pack = "<STR_LIT>" % get_template_pack()<EOL>try:<EOL><INDENT>helper = token.pop(<NUM_LIT:1>)<EOL><DEDENT>except IndexError:<EOL><INDENT>pass<EOL><DEDENT>try:<EOL><INDENT>template_pack = token.pop(<NUM_LIT:1>)<EOL><DEDENT>except IndexError:<EOL><INDENT>pass<EOL><DEDENT>if (<EOL>helper is not None and<EOL>isinstance(helper, string_types) and<EOL>("<STR_LIT:'>" in helper or '<STR_LIT:">' in helper)<EOL>):<EOL><INDENT>template_pack = helper<EOL>helper = None<EOL><DEDENT>if template_pack is not None:<EOL><INDENT>template_pack = template_pack[<NUM_LIT:1>:-<NUM_LIT:1>]<EOL>ALLOWED_TEMPLATE_PACKS = getattr(<EOL>settings,<EOL>'<STR_LIT>',<EOL>('<STR_LIT>', '<STR_LIT>', '<STR_LIT>', '<STR_LIT>')<EOL>)<EOL>if template_pack not in ALLOWED_TEMPLATE_PACKS:<EOL><INDENT>raise template.TemplateSyntaxError(<EOL>"<STR_LIT>" %<EOL>str(ALLOWED_TEMPLATE_PACKS)<EOL>)<EOL><DEDENT><DEDENT>return CrispyFormNode(form, helper, template_pack=template_pack)<EOL>
You need to pass in at least the form/formset object, and can also pass in the
optional `crispy_forms.helpers.FormHelper` object.

helper (optional): A `crispy_forms.helper.FormHelper` object.

Usage::

    {% load crispy_tags %}
    {% crispy form form.helper %}

You can also provide the template pack as the third argument::

    {% crispy form form.helper 'bootstrap' %}

If the `FormHelper` attribute is named `helper` you can simply do::

    {% crispy form %}
    {% crispy form 'bootstrap' %}