URL-адреса Django. Как передать несколько категорий через чистый URL-адрес без необходимости?

StackOverflow https://stackoverflow.com/questions/844276

Вопрос

Я хочу держаться подальше от параметров GET.Я не хочу использовать POST, и у меня есть как минимум две разные категории, для которых нужно создать URL-адрес.

Посетителям сначала предлагается выбрать место, которое может быть одним из, например:http://foo.com/United-States/ || http://foo.com/United-States/California/ || http://foo.com/United-States/California/San-Francisco-Region/ || http://foo.com/United-States/California/San-Francisco/

После выбора местоположения они могут выбрать категорию, которая может быть одной из, например:

http://foo.com/Electronics/ || http://foo.com/Electronics/Camera/ || http://foo.com/Electronics/Camera/Digital/ || http://foo.com/Electronics/Camera/Digital/SLR/

Итак, как мне объединить оба приведенных выше URL-адреса в один, как только они закончат выбор местоположения и категории?

Возможно, мне придется передать номер страницы для нумерации страниц.(http://foo.com/page/2/)

Я хотел бы сохранить URL-адрес чистым и понятным.Я знаю, как создавать URL-адреса одного типа за раз, но не объединять несколько типов.

Если бы мне пришлось выполнить GET, я бы сделал: http://foo.com/?locid=23323&catid=335&page=2, но мне нравится использовать преимущества чистого URL-адреса Django и избегать ?&.

Спасибо,

ВН44КА

Это было полезно?

Решение

Я думаю, что в URL-адресе будет много информации.Я предполагаю, что любая локация имеет свой уникальный идентификатор, то же самое касается и категории.Почему бы не создать URL:

http://foo.com/United-States/Electronics/

http://foo.com/California/Digital/

http://foo.com/San-Francisco/SLR/

и так далее...

В вашем случае достаточно двух аргументов.Или вы можете изменить название категории, чтобы оно было более содержательным.

http://foo.com/Electronics/Camera/Digital/ => http://foo.com/Digital-Cameras/

Другие советы

В зависимости от того, как вы используете данные о местоположении и как часто пользователь захочет изменить местоположение, лучше всего хранить их в сеансе, а не указывать в URL-адресе.

Например, я вряд ли начну искать зеркальные цифровые фотоаппараты в Сан-Франциско, а потом отправлюсь искать баскетбольные мячи в Балтиморе.

Однако, очевидно, этого будет недостаточно, если вам нужны постоянные ссылки на любую комбинацию местоположения и категории.

Подумав об этом некоторое время, я обнаружил, что лучшее решение (для меня) — это иметь строку, просто содержащую все нужные мне аргументы в чистом URL-адресе.

Итак, когда пользователи впервые приходят к http://foo.com/ им предлагаются места для выбора.На данный момент файлы cookie пусты.

Итак, пользователь идет дальше и выбирает США, URL-адрес будет выглядеть так http://foo.com/12334_0_0_0/United-States/ а для файла cookie местоположения установлено значение 1234, что является идентификатором местоположения США.

Теперь пользователь выбирает Калифорнию, и URL-адрес меняется на http://foo.com/1235_0_0_0/United-States-California/ и файл cookie заменяется с США на 1235, который является идентификатором местоположения Калифорния.На этом этапе пользователь выбирает категорию «Электроника».поэтому URL-адрес изменится на http://foo.com/1235_3333_0_0/Electronics/ и 3333 сохраняется в категории «Cookies».

Если пользователь перейдет к SLR Camera, он/она увидит http://foo.com/1235_3344_0_0/SLR-Cameras/.

Таким образом, первая часть URL-адреса отслеживает до 4 аргументов, которые можно передавать, а имена (слабы) предназначены просто для представления и SEO.

Я думаю, это сработает, верно?Было бы здорово, если бы часть URL-адреса x_y_z_p была закодирована в случайный текст и декодирована обратно в аргументы и числа.

Дайте мне знать, что вы думаете?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top