Skip to content

Commit

Permalink
Render fields in Bootstrap 5
Browse files Browse the repository at this point in the history
  • Loading branch information
dyve committed Mar 17, 2021
1 parent 05fb942 commit 689e0a0
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 18 deletions.
4 changes: 2 additions & 2 deletions example/templates/app/pagination.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@

<hr>

{% bootstrap_pagination lines url="/pagination?page=1&flop=flip" extra="q=foo" size="small" %}
{% bootstrap_pagination lines url="/pagination?page=1&flop=flip" extra="q=foo" size="sm" %}

{% bootstrap_pagination lines url="/pagination?page=1" size="large" %}
{% bootstrap_pagination lines url="/pagination?page=1" size="lg" %}

{% endblock %}
21 changes: 8 additions & 13 deletions src/django_bootstrap5/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
class BaseRenderer(object):
"""A content renderer."""

SIZES = ["sm", "md", "lg"]

def __init__(self, *args, **kwargs):
self.layout = kwargs.get("layout", "")
self.form_group_class = kwargs.get("form_group_class", FORM_GROUP_CLASS)
Expand All @@ -62,21 +64,14 @@ def __init__(self, *args, **kwargs):
)

def parse_size(self, size):
size = text_value(size).lower().strip()
if size in ("sm", "small"):
return "small"
if size in ("lg", "large"):
return "large"
if size in ("md", "medium", ""):
return "medium"
raise BootstrapError('Invalid value "%s" for parameter "size" (expected "sm", "md", "lg" or "").' % size)
size = text_value(size).lower().strip() or "md"
if size not in self.SIZES:
valid_sizes = ", ".join([f'"{size}"' for size in self.SIZES])
raise BootstrapError(f'Invalid value "{size}" for parameter "size" (valid values are {valid_sizes}).')
return size

def get_size_class(self, prefix="form-control"):
if self.size == "small":
return prefix + "-sm"
if self.size == "large":
return prefix + "-lg"
return ""
return f"{prefix}-{self.size}" if self.size in ["sm", "lg"] else ""

def _render(self):
return ""
Expand Down
15 changes: 15 additions & 0 deletions tests/test_bootstrap_field.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django import forms
from django.test import TestCase

from .test_templates import render_template_with_bootstrap


class BootstrapFieldTest(TestCase):
def test_bootstrap_field_text(self):
class TestForm(forms.Form):
name = forms.CharField()

test_form = TestForm()
test_form.fields["name"].widget.attrs["class"] = "form-control"
html = render_template_with_bootstrap("{{ form.name }}", context={"form": test_form})
self.assertHTMLEqual(html, '<input type="text" class="form-control" id="id_name" name="name" required>')
3 changes: 0 additions & 3 deletions tests/test_templatetags.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,11 +437,8 @@ def _test_size_medium(param):
self.assertNotIn("form-control-md", res)

_test_size("sm", "form-control-sm")
_test_size("small", "form-control-sm")
_test_size("lg", "form-control-lg")
_test_size("large", "form-control-lg")
_test_size_medium("md")
_test_size_medium("medium")
_test_size_medium("")

def test_datetime(self):
Expand Down

0 comments on commit 689e0a0

Please sign in to comment.