Как передать # в URL в качестве параметра в django 2

Я пытаюсь передать код «Req-2019#000001» URL-адрес Django. Я хочу передать этот код, а также обычную строку и число также в URL-адресе в качестве аргументов.

path('generateBomForSingleProduct/<requisition_no>/' , views.generateBomForSingleProduct, name='generateBomForSingleProduct'),

Он работает правильно, но проблема в том, что он добавляет дополнительные / перед #.

Мой URL теперь это

http://127.0.0.1:8000/production/generateBomForSingleProduct/Req-2019/#000001

Но я хочу, чтобы это понравилось

http://127.0.0.1:8000/production/generateBomForSingleProduct/Req-2019#000001

Никаких дополнительных "/" перед моим "#"


person Antu    schedule 16.09.2019    source источник
comment
path(r'generateBomForSingleProduct/<requisition_no>/' , views.generateBomForSingleProduct, name='generateBomForSingleProduct'), попробуй это   -  person Kostas Charitidis    schedule 16.09.2019
comment
Просто попробуй не работать, брат все равно даст мне лишнюю / @KostasCharitidis   -  person Antu    schedule 16.09.2019
comment
Ну, я не могу воспроизвести с такой небольшой частью кода, но быстрый обходной путь - использовать replace. т.е. your_url.replace('//#', '#')   -  person Kostas Charitidis    schedule 16.09.2019
comment
не могли бы вы привести пример?   -  person Antu    schedule 16.09.2019


Ответы (3)


Часть URL-адреса, следующая за символом # , обычно не отправляется на сервер в запросе страницы. Поэтому невозможно использовать URL как /production/generateBomForSingleProduct/Req-2019#000001


Обходной путь

Просто измените URL как /production/generateBomForSingleProduct/Req-2019/000001, поэтому вам также нужно изменить вид

# views.py
def generateBomForSingleProduct(request, part_1, part_2):
    unique_id = "{}#{}".format(part_1, part_2)
    # use the "unique_id"
    ...
#urls.py
urlpatterns = [
    ...,
    path('foo/<part_1>/<part_2>/', generateBomForSingleProduct, name="some-name"),
    ...

]
person JPG    schedule 16.09.2019

Использование «get» было бы правильным способом сделать это. # для фрагментов html, которые не отправляются на сервер. Почему это не может быть просто

/production/generateBomForSingleProduct/Req-2019?code=000001 и тогда вы так обрабатываете все в представлении?

person Matthew Gaiser    schedule 16.09.2019

Часть после # называется идентификатором фрагмента, который используется браузерами и никогда не отправляется на сервер.

В http://127.0.0.1:8000/production/generateBomForSingleProduct/Req-2019/#000001 URL 000001 никогда не отправляется на сервер. Следовательно, использование важной части URL-адреса после # бесполезно. Лучше передать 000001 в качестве параметров запроса или отдельным аргументом.

person Nishant Nawarkhede    schedule 16.09.2019
comment
Итак, вы пытаетесь сказать, что я не могу решить эту проблему? - person Antu; 16.09.2019
comment
@Antu, зачем тебе # в URL? - person Nishant Nawarkhede; 16.09.2019
comment
Из-за Req-2019/#000001 это уникальный код. Я могу попробовать другой способ решить эту проблему, не передавая код через URL-адрес, но я просто хочу знать, невозможно ли отправить # через URL-адрес? - person Antu; 16.09.2019
comment
@Antu Как я уже говорил ранее, часть после # называется идентификатором фрагмента, который используется только браузерами и никогда не отправляется на сервер. - person Nishant Nawarkhede; 16.09.2019
comment
@NishantNawarkhede обратите внимание, что это не имеет абсолютно никакого отношения к Django - отсутствие передачи части привязки на сервер является частью самой спецификации HTTP. - person bruno desthuilliers; 16.09.2019