Django URL / / двойной Слэш отбрасывается (возможно, по вине Apache)?
У меня есть 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 ответов:
Существует ли другое решение для динамического числа параметров
Да, это называется строкой запроса. Вместо этого уродливого шаблона используйте более простой (соответствующий требуемым параметрам) и передайте все остальное после
?, напримерexample.com/foo/42?p1=foo&p2=bar. Затем вы можете извлечь их изrequest.GET.
Я столкнулся с этим вопросом после отладки аналогичной проблемы на Django. Дополнительная косая черта всегда выпадала из-за nginx. Добавление
merge_slashes offв конфигурацию nginx исправило проблему.
Если вы хотите избежать уродства GET-параметров, и поскольку это представление
somewherePageнеявно знает, что ожидает переменное число частей от ссылающегося url, вы можете переместить код синтаксического анализа url в само представление.То есть сделайте шаблон url следующим образом:
('^(?i)somewhere/(\d+)/(.*)/$', somewherePage),И разделите его в начале вашего представления:
def somewherePage(request, somewhere_int, somewhere_pieces): import string the_pieces = string.split(somewhere_pieces, '/')
Ответ на то, что вызвало удаление extra//, - это некоторые команды из модуля mod_rewrite Apache. Я решил просто исправить так, как я создать URL-адреса, как полагают PiotrLegnica.
Comments