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, но я не знаю, как это понять.



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

734   4  

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

    Ничего не найдено.