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
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())
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): """ 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): """ 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())
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): return Template(text_type(self.html)).render(context)
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 }))
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())
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)
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)
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())
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): 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} )
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)
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)
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 }))
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}) )
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)
def render(self, form, form_style, context, template_pack=TEMPLATE_PACK): return Template(text_type(self.html)).render(context)