Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

button and html keywords with dash #267

Open
Maradonna90 opened this issue Jan 27, 2022 · 2 comments
Open

button and html keywords with dash #267

Maradonna90 opened this issue Jan 27, 2022 · 2 comments

Comments

@Maradonna90
Copy link

Maradonna90 commented Jan 27, 2022

I have a template with a bootstrap button

{% bootstrap_button data-bs-toggle="collapse" data-bs-target="#update-group-9" button_type="reset" content="Cancel" %}

but when I try to render it i get following error

Django Version: | 3.2.9  
TemplateSyntaxError  
Could not parse the remainder: '-bs-toggle="collapse"' from 'data-bs-toggle="collapse"'  
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/app/web/gui/views.py", line 62, in index
    return render(request, 'overall/index.html', context)
  File "/usr/local/lib/python3.10/site-packages/django/shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/usr/local/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 195, in render
    return template.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 172, in render
    return self._render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/defaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 183, in render
    template = context.template.engine.select_template(template_name)
  File "/usr/local/lib/python3.10/site-packages/django/template/engine.py", line 174, in select_template
    return self.get_template(template_name)
  File "/usr/local/lib/python3.10/site-packages/django/template/engine.py", line 143, in get_template
    template, origin = self.find_template(template_name)
  File "/usr/local/lib/python3.10/site-packages/django/template/engine.py", line 125, in find_template
    template = loader.get_template(name, skip=skip)
  File "/usr/local/lib/python3.10/site-packages/django/template/loaders/base.py", line 29, in get_template
    return Template(
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 155, in __init__
    self.nodelist = self.compile_nodelist()
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 193, in compile_nodelist
    return parser.parse()
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 478, in parse
    raise self.error(token, e)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 476, in parse
    compiled_result = compile_func(self, token)
  File "/usr/local/lib/python3.10/site-packages/django/template/library.py", line 119, in compile_func
    args, kwargs = parse_bits(
  File "/usr/local/lib/python3.10/site-packages/django/template/library.py", line 291, in parse_bits
    args.append(parser.compile_filter(bit))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 563, in compile_filter
    return FilterExpression(token, self)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 662, in __init__
    raise TemplateSyntaxError("Could not parse the remainder: '%s' "

Exception Type: TemplateSyntaxError at /
Exception Value: Could not parse the remainder: '-bs-toggle="collapse"' from 'data-bs-toggle="collapse"'
@yakky
Copy link

yakky commented Jul 20, 2023

I solved this by replacing _ to - in generic tag attributes in django_bootstrap5.html.render_tag.

So i can do something like {% bootstrap_button data_bs_toggle="collapse" data_bs_target="#update-group-9" button_type="reset" content="Cancel" %}

Generic attributes (like data_bs_toggle) are passed to render_tag without any changes while templatetag arguments (like button_type) are not, so it's safe to make this change without interfering django-bootstrap5 behaviour

@francoisfreitag
Copy link

francoisfreitag commented Oct 10, 2024

YMMV, custom attributes can be set on the widget:

>>> class MyForm(forms.Form):
>>>     check_me = forms.BooleanField(
>>>         widget=forms.CheckboxInput(attrs={"data-foo": "bar"})
>>>     )
>>>
>>> form = MyForm()
>>> str(form.as_div())
'<div>\n    <label for="id_check_me">Check me\xa0:</label>\n\n\n\n<input type="checkbox" name="check_me" data-foo="bar" required id="id_check_me">\n    \n      \n    \n</div>'

(doesn’t solve the issue for buttons though)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants