Краткий ответ : вы не можете использовать #
в строке запроса, поскольку это используется для указания привязки.
Вы не можете использоватьхеш-символ (#
) непосредственно в строке запроса, поскольку такой символ обычно используется для указания привязки.Действительно, URL-адрес типа /9460475/dzhango-ne-mozhet-raspoznat-v-url<b>#56146792</b>
означает, что вы ссылаетесь на якорь 56146792
(здесь #56146792
будет ссылаться на этот ответ).
Строка запроса кодируется с помощью процентное кодирование .Как и на странице Википедии в Строка запроса говорит :
Некоторые символы не могут быть частью URL (например, пробел) и некоторые другие символы имеют специальное значение в URL : например, символ #
можно использовать для дальнейшего указания подраздела (или фрагмента) документа.
Обычно вам не нужно беспокоиться об этом.Если вы используете <form>
, который будет передан через GET, тогда браузер должен правильно кодировать данные с процентным кодированием, и, таким образом, он будет использовать %23
, как вы узнали.
Кроме того, вам не нужно самостоятельно декодировать строку запроса.Django правильно декодирует строку запроса и преобразует ее в QueryDict
.Например:
>>> QueryDict('gallery_search=%23sometag')
<QueryDict: {'gallery_search': ['#sometag']}>
Таким образом, кодировка сделана прозрачной: QueryDict
будет правильно декодироваться, и вы получите контент, который был введен в строку поиска.