URL-адреса Django. Как передать несколько категорий через чистый URL-адрес без необходимости?
-
20-08-2019 - |
Вопрос
Я хочу держаться подальше от параметров 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 была закодирована в случайный текст и декодирована обратно в аргументы и числа.
Дайте мне знать, что вы думаете?