Skip to content

Commit

Permalink
Less mark_safe (#30)
Browse files Browse the repository at this point in the history
  • Loading branch information
dyve committed Mar 24, 2021
1 parent 3891c37 commit 0125653
Showing 1 changed file with 81 additions and 55 deletions.
136 changes: 81 additions & 55 deletions src/django_bootstrap5/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ def __init__(self, *args, **kwargs):
self.horizontal_field_class = kwargs.get(
"horizontal_field_class", get_bootstrap_setting("horizontal_field_class")
)
self.error_css_class = kwargs.get("error_css_class", None)
self.required_css_class = kwargs.get("required_css_class", None)
self.bound_css_class = kwargs.get("bound_css_class", None)
self.alert_error_type = kwargs.get("alert_error_type", "non_fields")
self.form_check_class = kwargs.get("form_check_class", "form-check")

@property
def is_floating(self):
Expand All @@ -79,13 +84,31 @@ def get_size_class(self, prefix):
"""Return size class for given prefix."""
return f"{prefix}-{self.size}" if self.size in ["sm", "lg"] else ""

def _render(self):
"""Render to string."""
return ""
def get_context_data(self):
"""Return context data for rendering."""
context = {
"layout": self.layout,
"wrapper_class": self.wrapper_class,
"field_class": self.field_class,
"label_class": self.label_class,
"show_help": self.show_help,
"show_label": self.show_label,
"exclude": self.exclude,
"set_placeholder": self.set_placeholder,
"size": self.size,
"horizontal_label_class": self.horizontal_label_class,
"horizontal_field_class": self.horizontal_field_class,
"error_css_class": self.error_css_class,
"bound_css_class": self.bound_css_class,
"required_css_class": self.required_css_class,
"alert_error_type": self.alert_error_type,
"form_check_class": self.form_check_class,
}
return context

def render(self):
"""Render to safe string."""
return mark_safe(self._render())
"""Render to string."""
return ""


class FormsetRenderer(BaseRenderer):
Expand All @@ -97,30 +120,33 @@ def __init__(self, formset, *args, **kwargs):
self.formset = formset
super().__init__(*args, **kwargs)

def get_context_data(self):
context = super().get_context_data()
context["formset"] = self.formset
return context

def render_management_form(self):
"""Return HTML for management form."""
return text_value(self.formset.management_form)

def render_forms(self):
rendered_forms = []
rendered_forms = mark_safe("")
for form in self.formset.forms:
rendered_forms.append(
render_form(
form,
layout=self.layout,
form_group_class=self.wrapper_class,
field_class=self.field_class,
label_class=self.label_class,
show_label=self.show_label,
show_help=self.show_help,
exclude=self.exclude,
set_placeholder=self.set_placeholder,
size=self.size,
horizontal_label_class=self.horizontal_label_class,
horizontal_field_class=self.horizontal_field_class,
)
rendered_forms += render_form(
form,
layout=self.layout,
form_group_class=self.wrapper_class,
field_class=self.field_class,
label_class=self.label_class,
show_label=self.show_label,
show_help=self.show_help,
exclude=self.exclude,
set_placeholder=self.set_placeholder,
size=self.size,
horizontal_label_class=self.horizontal_label_class,
horizontal_field_class=self.horizontal_field_class,
)
return "\n".join(rendered_forms)
return rendered_forms

def get_formset_errors(self):
return self.formset.non_form_errors()
Expand All @@ -132,10 +158,10 @@ def render_errors(self):
"django_bootstrap5/form_errors.html",
context={"errors": formset_errors, "form": self.formset, "layout": self.layout},
)
return ""
return mark_safe("")

def _render(self):
return "".join([self.render_errors(), self.render_management_form(), self.render_forms()])
def render(self):
return format_html(self.render_management_form() + "{}{}", self.render_errors(), self.render_forms())


class FormRenderer(BaseRenderer):
Expand All @@ -146,36 +172,34 @@ def __init__(self, form, *args, **kwargs):
raise BootstrapError('Parameter "form" should contain a valid Django Form.')
self.form = form
super().__init__(*args, **kwargs)
self.error_css_class = kwargs.get("error_css_class", None)
self.required_css_class = kwargs.get("required_css_class", None)
self.bound_css_class = kwargs.get("bound_css_class", None)
self.alert_error_type = kwargs.get("alert_error_type", "non_fields")
self.form_check_class = kwargs.get("form_check_class", "form-check")

def get_context_data(self):
context = super().get_context_data()
context["form"] = self.form
return context

def render_fields(self):
rendered_fields = []
rendered_fields = mark_safe("")
for field in self.form:
rendered_fields.append(
render_field(
field,
layout=self.layout,
form_group_class=self.wrapper_class,
field_class=self.field_class,
label_class=self.label_class,
form_check_class=self.form_check_class,
show_label=self.show_label,
show_help=self.show_help,
exclude=self.exclude,
set_placeholder=self.set_placeholder,
size=self.size,
horizontal_label_class=self.horizontal_label_class,
horizontal_field_class=self.horizontal_field_class,
error_css_class=self.error_css_class,
required_css_class=self.required_css_class,
bound_css_class=self.bound_css_class,
)
rendered_fields += render_field(
field,
layout=self.layout,
form_group_class=self.wrapper_class,
field_class=self.field_class,
label_class=self.label_class,
form_check_class=self.form_check_class,
show_label=self.show_label,
show_help=self.show_help,
exclude=self.exclude,
set_placeholder=self.set_placeholder,
size=self.size,
horizontal_label_class=self.horizontal_label_class,
horizontal_field_class=self.horizontal_field_class,
error_css_class=self.error_css_class,
required_css_class=self.required_css_class,
bound_css_class=self.bound_css_class,
)
return "\n".join(rendered_fields)
return rendered_fields

def get_fields_errors(self):
form_errors = []
Expand All @@ -199,10 +223,12 @@ def render_errors(self, type="all"):
context={"errors": form_errors, "form": self.form, "layout": self.layout, "type": type},
)

return ""
return mark_safe("")

def _render(self):
return self.render_errors(self.alert_error_type) + self.render_fields()
def render(self):
errors = self.render_errors(self.alert_error_type)
fields = self.render_fields()
return errors + fields


class FieldRenderer(BaseRenderer):
Expand Down Expand Up @@ -419,7 +445,7 @@ def field_before_label(self):
"""Return whether field should be placed before label."""
return isinstance(self.widget, CheckboxInput) or self.is_floating

def _render(self):
def render(self):
if self.field.name in self.exclude.replace(" ", "").split(","):
return ""
if self.field.is_hidden:
Expand Down

0 comments on commit 0125653

Please sign in to comment.