Example #1
0
def test_form_show_errors_non_field_errors():
    form = TestForm({'password1': 'wargame', 'password2': 'god'})
    form.helper = FormHelper()
    form.helper.form_show_errors = True
    form.is_valid()

    template = get_template_from_string("""
        {% load crispy_forms_tags %}
        {% crispy testForm %}
    """)

    # First we render with errors
    c = Context({'testForm': form})
    html = template.render(c)

    # Ensure those errors were rendered
    assert '<li>Passwords dont match</li>' in html
    assert text_type(_('This field is required.')) in html
    assert 'error' in html

    # Now we render without errors
    form.helper.form_show_errors = False
    c = Context({'testForm': form})
    html = template.render(c)

    # Ensure errors were not rendered
    assert '<li>Passwords dont match</li>' not in html
    assert text_type(_('This field is required.')) not in html
    assert 'error' not in html
def test_form_show_errors_non_field_errors():
    form = TestForm({"password1": "wargame", "password2": "god"})
    form.helper = FormHelper()
    form.helper.form_show_errors = True
    form.is_valid()

    template = get_template_from_string(
        """
        {% load crispy_forms_tags %}
        {% crispy testForm %}
    """
    )

    # First we render with errors
    c = Context({"testForm": form})
    html = template.render(c)

    # Ensure those errors were rendered
    assert "<li>Passwords dont match</li>" in html
    assert text_type(_("This field is required.")) in html
    assert "error" in html

    # Now we render without errors
    form.helper.form_show_errors = False
    c = Context({"testForm": form})
    html = template.render(c)

    # Ensure errors were not rendered
    assert "<li>Passwords dont match</li>" not in html
    assert text_type(_("This field is required.")) not in html
    assert "error" not in html
Example #3
0
    def render(self, form, form_style, context, template_pack=None):
        prop = getattr(form.instance, self.property_name) or ''

        # Get the property label
        if hasattr(prop, 'short_description'):
            name = prop.short_description
        elif self.property_name in form.fields:
            name = form.fields[self.property_name].label
        else:
            name = self.property_name

        # If the property is some kind of list
        iterator = None
        if isinstance(prop, (list, tuple)):
            iterator = prop
        elif prop.__class__.__name__ == 'ManyRelatedManager':
            iterator = prop.all()

        if iterator is not None:
            template = self.list_html
            value = '<li>%s</li>' % '</li><li>'.join([unicode(i) for i in iterator])
        else:
            template = self.html
            value = prop

        context.update({
            'name': name,
            'value': value,
        })
        return Template(text_type(template)).render(context)
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK,
               **kwargs):
        """
        Re-implement almost the same code from crispy_forms but using
        ``form`` instance to catch field errors.
        """
        content = ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(["accordion",
                                    text_type(randint(1000, 9999))])

        # Active first 'AccordionItem' containing a field error if any, else
        # active first holder item
        self.open_target_group_for_form(form)

        for group in self.fields:
            group.data_parent = self.css_id
            group.item_has_errors = any([fieldname_error for fieldname_error in
                                         form.errors.keys()
                                         if fieldname_error in group])
            content += render_field(
                group, form, form_style, context, template_pack=template_pack,
                **kwargs
            )

        template = self.get_template_name(template_pack)
        context.update({'accordion': self, 'content': content})

        return render_to_string(template, context.flatten())
Example #5
0
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        content = ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(
                ["accordion", text_type(randint(1000, 9999))])

        # first group with errors or first groupt will be visible, others will be collapsed
        self.first_container_with_errors(form.errors.keys()).active = True

        for group in self.fields:
            group.data_parent = self.css_id
            group.item_has_errors = any([
                fieldname_error for fieldname_error in form.errors.keys()
                if fieldname_error in group
            ])
            content += render_field(group,
                                    form,
                                    form_style,
                                    context,
                                    template_pack=template_pack)

        return render_to_string(
            self.template, Context({
                'accordion': self,
                'content': content
            }))
Example #6
0
 def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
     """
     Renders an `<input />` if container is used as a Layout object.
     Input button value can be a variable in context.
     """
     self.value = Template(text_type(self.value)).render(context)
     return render_to_string(self.template, Context({'input': self}))
Example #7
0
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        """
        Re-implement almost the same code from crispy_forms but passing
        ``form`` instance to item ``render_link`` method.
        """
        links, content = '', ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(
                ["tabsholder", text_type(randint(1000, 9999))])

        for tab in self.fields:
            tab.active = False

        # Activate item
        self.open_target_group_for_form(form)

        for tab in self.fields:
            content += render_field(tab,
                                    form,
                                    form_style,
                                    context,
                                    template_pack=template_pack)
            links += tab.render_link(form, template_pack)

        context.update({'tabs': self, 'links': links, 'content': content})

        template = self.get_template_name(template_pack)
        return render_to_string(template, context.flatten())
Example #8
0
 def __mod__(self, missing):
     try:
         missing_str = text_type(missing)
     except:
         missing_str = 'Failed to create string representation'
     raise Exception('Unknown template variable %r %s' %
                     (missing, missing_str))
Example #9
0
 def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
     """
     Renders an `<input />` if container is used as a Layout object.
     Input button value can be a variable in context.
     """
     self.value = Template(text_type(self.value)).render(context)
     return render_to_string(self.template, Context({'input': self}))
 def render(self,
            form,
            form_style,
            context,
            template_pack=TEMPLATE_PACK,
            **kwargs):
     return Template(text_type(self.html)).render(context)
Example #11
0
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        content = ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(
                ["accordion", text_type(randint(1000, 9999))])

        # Active first 'AccordionItem' containing a field error if any, else
        # active first holder item
        self.open_target_group_for_form(form)

        for group in self.fields:
            group.data_parent = self.css_id
            group.item_has_errors = any([
                fieldname_error for fieldname_error in form.errors.keys()
                if fieldname_error in group
            ])
            content += render_field(group,
                                    form,
                                    form_style,
                                    context,
                                    template_pack=template_pack)

        return render_to_string(
            self.template, Context({
                'accordion': self,
                'content': content
            }))
Example #12
0
    def render(self,
               form,
               form_style,
               context,
               template_pack=TEMPLATE_PACK,
               **kwargs):
        content = ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(
                ["accordion", text_type(randint(1000, 9999))])

        # Open the group that should be open.
        self.open_target_group_for_form(form)

        for group in self.fields:
            group.data_parent = self.css_id
            content += render_field(group,
                                    form,
                                    form_style,
                                    context,
                                    template_pack=template_pack,
                                    **kwargs)

        template = self.get_template_name(template_pack)
        context.update({'accordion': self, 'content': content})

        return render_to_string(template, context.flatten())
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        """
        Re-implement almost the same code from crispy_forms but passing
        ``form`` instance to item ``render_link`` method.
        """
        links, content = '', ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(["tabsholder",
                                    text_type(randint(1000, 9999))])

        for tab in self.fields:
            tab.active = False

        # Activate item
        self.open_target_group_for_form(form)

        for tab in self.fields:
            content += render_field(
                tab, form, form_style, context, template_pack=template_pack
            )
            links += tab.render_link(form, template_pack)

        context.update({
            'tabs': self,
            'links': links,
            'content': content
        })

        template = self.get_template_name(template_pack)
        return render_to_string(template, context.flatten())
Example #14
0
 def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, **kwargs):
     """
     Renders an `<button></button>` if container is used as a Layout object.
     Button value can be a variable in context.
     """
     self.value = Template(text_type(self.value)).render(context)
     template = self.template % template_pack
     return render_to_string(template, {'input': self}, context)
Example #15
0
 def render(self,
            form,
            form_style,
            context,
            template_pack=TEMPLATE_PACK,
            **kwargs):
     self.value = Template(text_type(self.value)).render(context)
     template = self.get_template_name(template_pack)
     return render_to_string(template, {'button': self}, context)
Example #16
0
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, **kwargs):
        """
        Renders an `<input />` if container is used as a Layout object.
        Input button value can be a variable in context.
        """
        self.value = Template(text_type(self.value)).render(context)
        template = self.get_template_name(template_pack)
        context.update({'input': self})

        return render_to_string(template, context.flatten())
Example #17
0
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        fields = ''
        for field in self.fields:
            fields += render_field(field, form, form_style, context,
                                   template_pack=template_pack)

        legend = ''
        if self.legend:
            legend = '%s' % Template(text_type(self.legend)).render(context)
        return render_to_string(self.template, Context({'fieldset': self, 'legend': legend, 'fields': fields, 'form_style': form_style}))
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, **kwargs):
        """
        Renders an `<input />` if container is used as a Layout object.
        Input button value can be a variable in context.
        """
        self.value = Template(text_type(self.value)).render(context)
        template = self.get_template_name(template_pack)
        context.update({'input': self})

        return render_to_string(template, context.flatten())
Example #19
0
    def render(self,
               form,
               form_style,
               context,
               template_pack=TEMPLATE_PACK,
               **kwargs):
        self.content = Template(text_type(self.content)).render(context)
        template = self.get_template_name(template_pack)
        context.update({'button': self})

        return render_to_string(template, context.flatten())
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, **kwargs):
        fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)

        legend = ''
        if self.legend:
            legend = '%s' % Template(text_type(self.legend)).render(context)

        template = self.get_template_name(template_pack)
        return render_to_string(
            template,
            {'fieldset': self, 'legend': legend, 'fields': fields, 'form_style': form_style}
        )
Example #21
0
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK, **kwargs):
        fields = self.get_rendered_fields(form, form_style, context, template_pack, **kwargs)

        legend = ''
        if self.legend:
            legend = '%s' % Template(text_type(self.legend)).render(context)

        template = self.get_template_name(template_pack)
        return render_to_string(
            template,
            {'fieldset': self, 'legend': legend, 'fields': fields, 'form_style': form_style}
        )
Example #22
0
 def render(self,
            form,
            form_style,
            context,
            template_pack=TEMPLATE_PACK,
            **kwargs):
     """
     Renders an `<button></button>` if container is used as a Layout object.
     Button value can be a variable in context.
     """
     self.value = Template(text_type(self.value)).render(context)
     template = self.template % template_pack
     return render_to_string(template, {'input': self}, context)
Example #23
0
    def render(self, form, form_style, context, template_pack=None):
        prop = getattr(form.instance, self.property_name) or ''
        prop_name = self.property_name

        try:
            form_field = form.fields[prop_name]
        except:
            form_field = None

        try:
            model_field = form.instance._meta.get_field(prop_name)
        except:
            model_field = None

        # Get the property label
        if hasattr(prop, 'short_description'):
            name = prop.short_description
        elif form_field:
            name = form_field.label
        elif model_field:
            name = model_field.verbose_name
        else:
            name = self.property_name

        # If the property is some kind of list
        iterator = None
        if isinstance(prop, (list, tuple)):
            iterator = prop
        elif prop.__class__.__name__ == 'ManyRelatedManager':
            iterator = prop.all()

        if iterator is not None:
            template = self.list_html
            value = '<li>%s</li>' % '</li><li>'.join(
                [unicode(i) for i in iterator])
        else:
            template = self.html
            value = prop

        context.update({
            'name': name,
            'value': value,
        })
        return Template(text_type(template)).render(context)
Example #24
0
    def render(self, form, form_style, context, template_pack=None):
        prop = getattr(form.instance, self.property_name) or ''
        prop_name = self.property_name

        try:
            form_field = form.fields[prop_name]
        except:  # noqa
            form_field = None

        try:
            model_field = form.instance._meta.get_field(prop_name)
        except:  # noqa
            model_field = None

        # Get the property label
        if hasattr(prop, 'short_description'):
            name = prop.short_description
        elif form_field:
            name = form_field.label
        elif model_field:
            name = model_field.verbose_name
        else:
            name = self.property_name

        # If the property is some kind of list
        iterator = None
        if isinstance(prop, (list, tuple)):
            iterator = prop
        elif prop.__class__.__name__ == 'ManyRelatedManager':
            iterator = prop.all()

        if iterator is not None:
            template = self.list_html
            value = '<li>%s</li>' % '</li><li>'.join([i for i in iterator])
        else:
            template = self.html
            value = prop

        context.update({
            'name': name,
            'value': value,
        })
        return Template(text_type(template)).render(context)
Example #25
0
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        fields = ''
        for field in self.fields:
            fields += render_field(field,
                                   form,
                                   form_style,
                                   context,
                                   template_pack=template_pack)

        legend = ''
        if self.legend:
            legend = u'%s' % Template(text_type(self.legend)).render(context)
        return render_to_string(
            self.template,
            Context({
                'fieldset': self,
                'legend': legend,
                'fields': fields,
                'form_style': form_style
            }))
Example #26
0
    def render(self,
               form,
               form_style,
               context,
               template_pack=TEMPLATE_PACK,
               **kwargs):
        """
        Re-implement almost the same code from crispy_forms but using
        ``form`` instance to catch field errors.
        """
        content = ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(
                ["accordion", text_type(randint(1000, 9999))])

        # Active first 'AccordionItem' containing a field error if any, else
        # active first holder item
        self.open_target_group_for_form(form)

        for group in self.fields:
            group.data_parent = self.css_id
            group.item_has_errors = any([
                fieldname_error for fieldname_error in form.errors.keys()
                if fieldname_error in group
            ])
            content += render_field(group,
                                    form,
                                    form_style,
                                    context,
                                    template_pack=template_pack,
                                    **kwargs)

        template = self.get_template_name(template_pack)
        context.update({'accordion': self, 'content': content})

        return render_to_string(template, context.flatten())
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        content = ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(["accordion", text_type(randint(1000, 9999))])

        # first group with errors or first groupt will be visible, others will be collapsed
        self.first_container_with_errors(form.errors.keys()).active = True

        for group in self.fields:
            group.data_parent = self.css_id
            group.item_has_errors = any([fieldname_error for fieldname_error in form.errors.keys() if fieldname_error in group])
            content += render_field(
                group, form, form_style, context, template_pack=template_pack
            )

        return render_to_string(
            self.template,
            Context({'accordion': self, 'content': content})
        )
    def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
        content = ''

        # accordion group needs the parent div id to set `data-parent` (I don't
        # know why). This needs to be a unique id
        if not self.css_id:
            self.css_id = "-".join(["accordion", text_type(randint(1000, 9999))])
        
        # Active first 'AccordionItem' containing a field error if any, else 
        # active first holder item
        self.open_target_group_for_form(form)

        for group in self.fields:
            group.data_parent = self.css_id
            group.item_has_errors = any([fieldname_error for fieldname_error in form.errors.keys() if fieldname_error in group])
            content += render_field(
                group, form, form_style, context, template_pack=template_pack
            )

        return render_to_string(
            self.template,
            Context({'accordion': self, 'content': content})
        )
Example #29
0
    def render(self, form, form_style, context, template_pack=None):
        field = form[self.fields[0]]
        value = field.value()
        try:
            html = self.existing_file_html
            name = value.name
            url = value.url
        except (ValueError, AttributeError):
            html = self.no_file_html
            name = None
            url = None

        context.update({
            'field': field,
            'name': name,
            'url': url,
        })

        field_name = self.fields[0]
        if field_name not in form.rendered_fields:
            form.rendered_fields.add(field_name)

        return Template(text_type(html)).render(context)
Example #30
0
    def render(self, form, form_style, context, template_pack=None):
        field = form[self.fields[0]]
        value = field.value()
        try:
            html = self.existing_file_html
            name = value.name
            url = value.url
        except (ValueError, AttributeError):
            html = self.no_file_html
            name = None
            url = None

        context.update({
            'field': field,
            'name': name,
            'url': url,
        })

        field_name = self.fields[0]
        if field_name not in form.rendered_fields:
            form.rendered_fields.add(field_name)

        return Template(text_type(html)).render(context)
Example #31
0
 def render(self, form, form_style, context, template_pack=TEMPLATE_PACK):
     return Template(text_type(self.html)).render(context)
 def __mod__(self, missing):
     try:
         missing_str = text_type(missing)
     except:
         missing_str = 'Failed to create string representation'
     raise Exception('Unknown template variable %r %s' % (missing, missing_str))
 def render(self, form, form_style, context, template_pack=TEMPLATE_PACK,
            **kwargs):
     self.value = Template(text_type(self.value)).render(context)
     template = self.get_template_name(template_pack)
     return render_to_string(template, {'button': self}, context)