Created
August 6, 2014 22:24
Django template filter to add attributes to form fields
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# From http://vanderwijk.info/blog/adding-css-classes-formfields-in-django-templates/#comment-1193609278 | |
from django import template | |
register = template.Library() | |
@register.filter(name='add_attributes') | |
def add_attributes(field, css): | |
attrs = {} | |
definition = css.split(',') | |
for d in definition: | |
if ':' not in d: | |
attrs['class'] = d | |
else: | |
t, v = d.split(':') | |
attrs[t] = v | |
return field.as_widget(attrs=attrs) |
can not add class to 'widget=forms.RadioSelect'
input is ok
why? can you fix it ?
for example,you want to add "style:width:20px",
there will be a collision between the Colon in the template and the colon in the python code.
so,you can change the : to = in the register.
There is also a problem if you want to add multiple classes (like form-control selectpicker) (https://silviomoreto.github.io/bootstrap-select/examples/#styling).
What I've done is use collections.defaultdict(str)
instead of a simple dict
, then just add to the css attribute.
def addcss(field, css):
try:
attrs = collections.defaultdict(str)
definition = css.split(',')
for d in definition:
if ':' not in d:
attrs['class'] += " %s"%d
else:
t, v = d.split(':')
attrs[t] = v
return field.as_widget(attrs=attrs)
except Exception as e:
return field
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is great! Any interest in making it a standalone package?