У меня есть модель Django с большим количеством полей и 20000 + строк таблицы. Для облегчения читаемой URL-адресов человека и способности расщеплять большой список в произвольные подсписки, я хотел бы иметь URL, который выглядит следующим образом:Django: произвольное количество неизвестных параметров urls.py
/browse/<name1>/<value1>/<name2>/<value2>/ .... etc ....
где «имя» карта к атрибуту модели и «значения» это критерии поиска для этого атрибута. Каждое «имя» будет рассматриваться как категория для возврата подмножеств экземпляров модели, в которых соответствуют категории.
Теперь это можно обрабатывать с помощью параметров GET, но я предпочитаю более читаемые URL-адреса как для пользователя, так и для поисковых систем. Эти подмножества URL-адресов будут встроены на каждую страницу, отображающую эту модель, поэтому, похоже, стоит сделать красивые URL-адреса.
В идеале каждое имя/значение пара будет передана функции просмотра в качестве параметра с именем name1
, name2
и т.д. Тем не менее, я не считаю, что это возможно, определенными именованными шаблоны с помощью согласованного текста регулярных выражений в. Я там не прав?
Таким образом, кажется, что мне нужно сделать что-то вроде этого:
urlpatterns = patterns('',
url(r'^browse/(?:([\w]+)/([\w]+)/)+$', 'app.views.view', name="model_browse"),
)
Кажется, это должно соответствовать любые наборы из двух пар имя/значение. Хотя он успешно совпадает с ним, он передает только пару последних имен/значений в качестве параметров функции просмотра. Я предполагаю, что каждый матч переписывает предыдущий матч. Под предположение, что содержащий (?: ...) + вызывает это, я попытался простой повторяющийся узор вместо:
urlpatterns = patterns('',
url(r'^browse/([\w]+/)+$', 'app.views.view', name="model_browse"),
)
... и получил ту же проблему, но на этот раз *args
включает в себя только последний согласованный шаблон.
Является ли это ограничителем диспетчера сообщений Django и/или поддержкой регулярного выражения Python? Кажется, что любой из этих методов должен работать. Есть ли способ достичь этого без жесткого кодирования каждого возможного атрибута модели в URL как дополнительный (. *) Шаблон?
Я думаю, что реализовать «GET запрос типа» ключ-значение Params с помощью URL само по себе является немного некрасиво и не «истинный». – 2008-11-03 17:01:26
@alex - кроме того, что URL-адрес не читается, поисковые системы, вероятно, не будут индексировать весь ваш контент, если у вас есть пара, получающая параметры (если это). – 2009-03-23 16:37:33