Джанго не может распознать # в URL - PullRequest
1 голос
/ 15 мая 2019

Я создаю панель поиска, и я хочу использовать «#» на моей панели поиска, все в порядке, пока «% 23» не появится в URL, но когда я изменю ее с помощью «#», представление не получит никакой строки запроса

это для django 2.2.1

my view:

   class SearchGalleryView(generic.TemplateView):
       ...
       def get_context_data(self,*args,**kwargs):
          print(self.request.GET)

first url:
   http://localhost:8000/gallery/search/?gallery_search=%23sometag


first result:
   <QueryDict: {'gallery_search': ['#sometag']}>


second url:
   http://localhost:8000/gallery/search/?gallery_search=#sometag

second result:
   <QueryDict: {'gallery_search': ['']}>

1 Ответ

1 голос
/ 15 мая 2019

Краткий ответ : вы не можете использовать # в строке запроса, поскольку это используется для указания привязки.

Вы не можете использоватьхеш-символ (#) непосредственно в строке запроса, поскольку такой символ обычно используется для указания привязки.Действительно, 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 будет правильно декодироваться, и вы получите контент, который был введен в строку поиска.

...