/products/by-popularity/ /products/featured/ /products/page/5/ /products/add/ /products/elvis/ /product/in-the-ghetto/ /product/jail-house-rock/ /product/love-me-tender/
On Apr 16, 2:29 pm, Aidas Bendoraitis <aidas.bendorai...@gmail.com> wrote: > Hello, > > Recently, we are solving a conceptual question of designing clean urls > for list and detail views of objects with slugs. > > Let's say we have products with their slugs. In the naive way, the > list view could be accessed by > /products/ > and the detail views could be accessed by > /products/myproduct/ > where "myproduct" is a slug of a product. > > Problems appear when you want to filter or sort list of products by > different parameters, have a possibility to add another product, or > have pagination. In those cases > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > etc. > would clash with > /products/<product_slug>/ > and there should be either a black list of words for <product_slugs> > like del.ici.ous and flickr.com does, or there should be another way > to differentiate between slugs and controlling words. In my opinion, > the black-list approach is very limited and doesn't make your website > extensible. So let's see what other options are. > > 1. One of the approaches is to use special symbols for the controlling > words, which are not allowed in slugs, like in last.fm or wikipedia > does. So the list urls might look like this: > /products/sort-by:popularity/ > /products/filter-by:featured/ > /products/page:5/ > /products/action:add/ > /products/myproduct/ > /products/myanotherproduct/ > or > /products/+by-popularity/ > /products/+featured/ > /products/+page5/ > /products/+add/ > /products/myproduct/ > /products/myanotherproduct/ > > 2. Another way is to use a special symbol like a dot together with the > primary key as a part of the url for product-details page, i.e.: > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > /products/123.myproduct/ > /products/456.myanotherproduct/ > or > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > /products/myproduct.123/ > /products/myanotherproduct.456/ > > 3. Using a prefix for product details: > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > /products/prod_myproduct/ > /products/prod_myanotherproduct/ > /products/prod_featured/ > > 4. Using a separate namespace for product details: > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > /products/product/myproduct/ > /products/product/myanotherproduct/ > or > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > /products/details/myproduct/ > /products/details/myanotherproduct/ > or > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > /products/unit/myproduct/ > /products/unit/myanotherproduct/ > > 5. Using upper case for controlling words: > /products/BY-POPULARITY/ > /products/FEATURED/ > /products/PAGE5/ > /products/ADD/ > /products/myproduct/ > /products/myanotherproduct/ > > 6. Using plural for managing lists and using singular for managing > details: > /products/by-popularity/ > /products/featured/ > /products/page5/ > /products/add/ > /product/myproduct/ > /product/myanotherproduct/ > > 7. Using the controlling words before the type of list: > /by-popularity/products/ > /featured/products/ > /page5/products/ > /add/products/ > /products/myproduct/ > /products/myanotherproduct/ > > What approaches do/would you use and why? What would be best for a > future-proof website? Are there any valuable resources about URL > design? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---