django-crispy-forms / crispy-tailwind

A Tailwind template pack for django-crispy-forms
MIT License
331 stars 56 forks source link

add support for `color` type widget #106

Closed yedpodtrzitko closed 5 months ago

yedpodtrzitko commented 2 years ago

Hi, this should enable inputs with theirs type parameter set to color.

Currently using color type ends with the following exception:

Traceback (most recent call last):
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 988, in render
    output = self.filter_expression.resolve(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 698, in resolve
    new_obj = func(obj, *arg_vals)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/crispy_forms/templatetags/crispy_forms_filters.py", line 64, in as_crispy_form
    return template.render(c)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/crispy_forms/templatetags/crispy_forms_utils.py", line 21, in render
    return remove_spaces(self.nodelist.render(context).strip())
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/defaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/loader_tags.py", line 195, in render
    return template.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 172, in render
    return self._render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/Users/yed/.pyenv/versions/venv/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/Users/yed/dev/project/crispy_tailwind/templatetags/tailwind_field.py", line 169, in render
    css = " " + css_container.get_input_class(field)
  File "/Users/yed/dev/project/crispy_tailwind/tailwind.py", line 77, in get_input_class
    return getattr(self, widget_name)

Exception Type: AttributeError at ...
Exception Value: 'CSSContainer' object has no attribute 'color'
codecov-commenter commented 2 years ago

Codecov Report

Merging #106 (bcadd12) into main (370ccb9) will not change coverage. The diff coverage is n/a.

Impacted file tree graph

@@           Coverage Diff           @@
##             main     #106   +/-   ##
=======================================
  Coverage   82.41%   82.41%           
=======================================
  Files          37       37           
  Lines         637      637           
  Branches       28       28           
=======================================
  Hits          525      525           
  Misses        102      102           
  Partials       10       10           
Impacted Files Coverage Δ
crispy_tailwind/tailwind.py 96.87% <ø> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 370ccb9...bcadd12. Read the comment docs.

GitRon commented 6 months ago

Hi @yedpodtrzitko!

I am quite new to tailwind and haven't seen this error before. Can you provide a quick code example on how you've managed to break this package?

Best
Ronny

yedpodtrzitko commented 5 months ago
class ColorWidget(widgets.TextInput):
    input_type = "color"

class MyForm(forms.ModelForm):
    default_color = forms.CharField(label="Default Color", widget=ColorWidget)
GitRon commented 5 months ago

Hi @yedpodtrzitko!

Thx for the code snippet! I tried it out and in both cases (with your change and without), I get this result:

grafik

What am I missing?

yedpodtrzitko commented 5 months ago

Hmm, cant reproduce it neither after updating to the latest version. Seems like it was fixed as a side-effect by some changes done in since I opened this PR.

Closing then, thanks for investigating :)

GitRon commented 5 months ago

Thanks for your support! 💪