Решение оказалось простым. Несмотря на то, что я прочитал документацию несколько раз, читать ее утром после ответа Назктера, вероятно, было то, что мне было нужно, спасибо!
Оказывается, что:
{% get_language_info_list for LANGUAGES as languages %}
не нужно. Более простая версия:
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% for CODE, NAME in LANGUAGES %}
<a href="/{{ CODE }}{{ request.get_full_path|slice:'6:' }}"
class="mx-3 {% if CODE == LANGUAGE_CODE %}selected{% endif %}"
lang="{{ CODE }}">{{ NAME }}</a>
{% endfor %}
Обратите внимание, что это работает только для полных кодов языка, например, en-us
, как мы используем slice:'6'
.
Да, Линт ПК является, вероятно, лучшим доступным инструментом.
Я запустил бы путем приобретения знаний о шплинте и gdb. Если Вы нуждаетесь более усовершенствованный, основываетесь на этих двух инструментах. Но они - хорошее начало.
В дополнение к предложению Линта ПК Lykathea можно также поправиться (или по крайней мере больше) диагностика при увеличении уровня предупреждения компилятора. Что-то как /W4
или -Wall
Хотя я не уверен, была ли Ваша конкретная проблема бы поймана с этим (MS, VC, кажется, не отмечает его даже с помощью всех включенных предупреждений). Я думаю поэтому, что это не редкая идиома для for
циклы, чтобы быть пустым, когда работа сделана как побочные эффекты выражений управления циклом.
Несколько вещей, которые сохранили меня в прошлом от вершины моей головы:
Используйте, если (3 == bla), а не (bla == 3), потому что, если Вы пишете c орфографическими ошибками и вводите (3 = bla) компилятор будет жаловаться.
Используйте переключатель все-предупреждений. Ваш компилятор должен предупредить Вас о пустых операторах как этот.
Используйте утверждения, когда Вы будете мочь и программа оборонительно. Приложите хорошие усилия к тому, чтобы заставлять Вашу программу перестать работать рано, Вы будете видеть слабые места тот путь.
Не пытайтесь обойти любые гарантии, которые компилятор или ОС поместили на месте. Они там для Вашей простоты программирования также.
GCC имеет большую часть функциональности, которую Линт имел созданный на пути флаги предупреждения.
Любая хорошая среда программирования GUI ("IDE" - Интегрированная среда разработки) как Eclipse генерировала бы предупреждение в случае как этот.
В этой (старой) версии того, Как Выстрелить себе В Ногу, и во многие другие версии вокруг сети, C всегда является языком, который допускает самую простую процедуру. При программировании в C необходимо помнить это и быть осторожными. Если Вы хотите защиту, выбираете другой язык.
Это высказывание приписывается Bjarne Stroustrup (C++) самому. К (mis) кавычка:
"C помогает выстрелить себе в ногу"
Хороший маркер синтаксиса сделает некоторые случаи как это более видимыми.
Я бы предложил посмотреть, есть ли у вас возможность обеспечить соблюдение стандартов MISRA. Они были написаны с большой продуманностью и содержат много правил, которые компилятор может легко проверить. Например, правило, которое я использую, требует, чтобы все команды NOP имели свою собственную строку. Это означает, что если вы поставите ; в конце оператора цикла, он выдаст ошибку, говоря, что команда не находится на своей собственной строке.