URL Django // удаляется двойной слеш (возможно, ошибка Apache) - PullRequest
4 голосов
/ 12 февраля 2011

У меня есть URL с рисунком, например, так:

('^(?i)somewhere/(\d+)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/$', somewherePage),

, где он должен подобрать URL, например:

http://foo.com/somewhere/1337/foo/params/that/are//maybe///used/

Обратите внимание, что некоторые параметры отсутствуют и приводят к //. Это перестало работать, и вместо правильного URL я получаю что-то вроде:

http://foo.com/somewhere/1337/foo/params/that/are/maybe/used/

там, где нет нужных слешей, и мой шаблон не распознается. Я думаю, это может быть вызвано тем, что делает мой веб-сервер apache, но я не знаю, как это выяснить.

У меня вопрос: как я могу остановить удаление лишних слешей или есть другое решение для динамического числа параметров? Также этот код работал нормально, но смысл прекратился. Я не уверен, что изменилось, поскольку база кода является устаревшей, но я знаю, что этот способ передачи переменного числа параметров сработал.

Ответы [ 4 ]

4 голосов
/ 12 февраля 2011

есть другое решение для динамического числа параметров

Да, это называется строкой запроса.Вместо этого уродливого паттерна используйте более простой (тот, который соответствует требуемым параметрам) и передайте все остальное после ?, например example.com/foo/42?p1=foo&p2=bar.Затем вы можете извлечь их из request.GET.

3 голосов
/ 05 декабря 2013

Я столкнулся с этим вопросом после устранения подобной проблемы на Django. Из-за nginx дополнительная косая черта всегда сбрасывалась. Добавление merge_slashes off в конфигурацию nginx устранило проблему.

1 голос
/ 12 февраля 2011

Если вы хотите избежать уродливости параметров GET, и поскольку это представление somewherePage неявно знает, что должно ожидать переменное число частей назад от ссылочной ссылки, вы можете переместить код парсинга URL в само представление. 1002 *

То есть, сделать шаблон URL следующим образом:

('^(?i)somewhere/(\d+)/(.*)/$', somewherePage),

и разделить его в начале просмотра:

def somewherePage(request, somewhere_int, somewhere_pieces):
    import string
    the_pieces = string.split(somewhere_pieces, '/')
0 голосов
/ 12 февраля 2011

Ответом на то, что вызывало удаление лишних //, являются некоторые команды из модуля Apache mod_rewrite.Я решил просто исправить способ создания URL-адресов в соответствии с предложением PiotrLegnica.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...