Вопрос любителям Python2.x.
В очередной раз сталкиваюсь с такой ошибкой.
Вот код виджета, в котором ошибка случилась:
from django.forms import widgets
from django.forms.utils import flatatt
from django.utils.html import format_html
from django.utils.encoding import force_text
from django.utils.safestring import mark_safe
import json
class SuggestWidget(widgets.TextInput):
def __init__(self, variants=None, attrs=None):
self.variants = variants
super(SuggestWidget, self).__init__(attrs)
class Media:
def __init__(self):
pass
css = {'all': (
'http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css',
), }
js = (
'http://code.jquery.com/jquery-2.2.0.js',
'http://code.jquery.com/ui/1.11.4/jquery-ui.js',
)
def render(self, name, value, attrs=None):
if value is None:
value = ''
final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
if value != '':
final_attrs['value'] = force_text(self._format_value(value))
acp = ""
variants_str = json.dumps(self.variants)
if variants_str:
acp = """
<script>
$(function() {
var variants = %s;
console.log(variants)
$("#%s").autocomplete({
source: variants
})
});
</script>
""" % (variants_str, final_attrs.get('id'))
return format_html('<input{} />{}', flatatt(final_attrs), mark_safe(acp))
И вот трэйсбек
Задача, надеюсь, понятна: виджет должен быть почти TextInput, но с подсказками, реализованными jqueryui autocomplete.
Вот почему? Откуда? Как?
И да, вопрос в этом разделе, а не в основном — так и задумано. Дело в том, что данная конкретная ошибка с вот именно этим виджетом просто решена уже. Но вопрос: что не так? Почему такое возникает? Почему вообще какие-то ошибки с юникодом в 2016 году? Как защититься от таких ошибок, если проект на 2.7?