Django template dictsort не упорядочивается правильно при использовании испанского языка

В настоящее время у меня есть диктант страны

Мой вид класса выглядит так

class SubmitView(TemplateView):
    def get(self, request):
        context = {}
        form = AddDefenitionForm()
        context['countries'] = COUNTRIES
        context['form'] = form
        return render(request, "submit.html", context)

А мой submit.html выглядит так

{% for p in countries.countries|dictsort:"name_es" %}
<option value="{{ p.code|lower }}">{{ p.name_es }}</option>
{% endfor %}

По какой-то причине в этом словаре слово México появляется в конце буквы M.

В соответствии с комментарием Ene Paul, вы можете добавить name_normalized ключ/значение к вашему словарю.

Я не могу опубликовать полное решение для словаря, но вы можете сделать это самостоятельно просто с помощью функции strip_accents.

for d in COUNTRIES['countries']:
    d['name_normalized'] = strip_accents(d['name_es'])

Затем используйте онлайн-форматер Python для вывода (необязательно). Вставьте поверх существующего списка стран.

Затем в шаблоне:

<select name="countries" id="countries">
  {% for p in countries.countries|dictsort:"name_normalized" %}
    <option value="{{ p.code|lower }}">{{ p.name_es }}</option>
  {% endfor %}
</select>

(также удалите лишний пробел перед словами "Санто Томе и Принсипи")

enter image description here

Вернуться на верх