Django: невозможно добавить имя атрибута в верхнем регистре в элемент ввода HTML

#django

#django

Вопрос:

Я пытаюсь использовать библиотеку javascript в django, которая требует некоторых атрибутов для элементов HTML в camelCase. Например, у меня есть модель с полем CharField, подобным этому:

 expires = models.DateField("Expiration Date", db_index = False, blank = True, null = True, editable = True, help_text = "Something")
  

Моя форма модели имеет следующую строку в методе инициализации:

 self.fields['expires'].widget.attrs['SomeAttribute'] = "SomeValue"
  

и после render_to_response выводимый HTML выглядит следующим образом:

 <input id="id_expires" type="text" name="expires" someattribute="SomeValue">
  

вместо:

 <input id="id_expires" type="text" name="expires" SomeAttribute="SomeValue">
  

Я что-то упустил?

Комментарии:

1. Что такое библиотека Javascript? Если он правильно взаимодействует с DOM, оболочка не должна иметь никакого значения.

2. Спасибо, Джордан, я использую jQuery. Я полагаю, что метка атрибута не чувствительна к регистру, верно?

3. Да, это правильно. Корпус атрибута не должен иметь значения; в прошлый раз, когда я проверял, каждый браузер возвращал его обратно без учета регистра, поскольку HTML и XHTML в любом случае имеют разные стандарты в отношении корпуса.

Ответ №1:

Как указывает Issac вверху, то, что у вас должно быть правильным. Внутренние компоненты Django, ответственные за рендеринг вышеуказанного в django.forms.widgets

 return mark_safe(u'<input%s />' % flatatt(final_attrs))
  

должно дать вам правильный attr, который вы ищете. Мне удалось воспроизвести вашу проблему, когда я проверил HTML, отображаемый в Firebug. Кажется, что Firebug использует нижний регистр имени атрибута, но когда я просматривал исходный код, он отображался как SomeAttribute по сравнению с someattribute в Firebug (если это действительно то, что вы делаете :))

Ответ №2:

Я не смог найти ничего в кодовой базе django forms, что говорит о том, что это ошибка django. Как вы отображаете форму? Пожалуйста, смотрите Мой сеанс оболочки для получения подробной информации.

 >>> from django import forms
>>> class F(forms.Form):
...  a = forms.CharField()
... 
>>> f = F()
>>> f.as_p()
u'<p><label for="id_a">A:</label> <input type="text" name="a" id="id_a" /></p>'
>>> f.fields['a'].widget.attrs
{}
>>> f.fields['a'].widget.attrs['dERP'] = 'ddf'
>>> f.as_p()
u'<p><label for="id_a">A:</label> <input id="id_a" type="text" name="a" dERP="ddf" /></p>'
>>>