Почему Django `urlencode` не кодирует косую черту?

Я вижу, что фильтр Django urlencode не кодирует косую черту по умолчанию:

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode

Я знаю, что могу сделать кодировку косой черты, но почему она не делает это по умолчанию? Не принято ли поведение кодирования косой черты, учитывая, что это зарезервированный символ в URL-адресах?

Ответ 1

Из источника Django urlencode является в основном оболочкой утилиты Django urlquote. Из комментариев в источнике, urlquote является версией urllib.quote с поддержкой UTF-8.

Итак, urlencode использует те же значения по умолчанию, что и python urllib.quote, и причина, по которой urllib.quote не работает, слэши можно найти в документации :

Замените специальные символы в строке, используя escape-последовательность% xx. Буквы, цифры, а символы "_.-" никогда не цитируются. По умолчанию это функция предназначена для цитирования раздела пути URL. необязательный безопасный параметр указывает дополнительные символы, которые должны не указывается - его значением по умолчанию является '/'.

Итак, причина в том, что он ускользает от пути, а '/' - вполне ожидаемый и допустимый символ в пути.