#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>'
>>>