【问题标题】:Django URLs - How to pass in multiple caterories via the clean URL without the need for?Django URLs - 如何通过干净的 URL 传递多个餐饮而不需要?
【发布时间】:2009-05-09 23:07:08
【问题描述】:

我想远离 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,但我喜欢利用 Django 的干净 URL 并远离 ?& 的东西。

谢谢,

VN44CA

【问题讨论】:

    标签: url post seo get django-urls


    【解决方案1】:

    我认为这将涉及 URL 中的许多信息。我假设任何位置都有其唯一 ID,类别也是如此。为什么不建立一个 URL:

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

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

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

    等等……

    在您的情况下,2 个参数就足够了。或者您可以更改类别名称以使其更有意义。

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

    【讨论】:

    • 谢谢帕维尔。你能给我两个归档网址的网址示例吗?您将在应用程序的 url.py 中放入的内容。我想像这样的东西? url(r'^(?P[^/]+)/(?P[^/]+)/$', views.item_by_location),
    • 是的,我不是 django 专家(测试过但从未将其用于实际项目)。我认为它对SEO很有效,因为网址不会臃肿。
    【解决方案2】:

    根据您使用位置数据的方式以及用户希望更改位置的频率,最好将其存储在会话中,而不是在 URL 中指定。

    例如,我不太可能开始在旧金山寻找单反数码相机,然后去巴尔的摩寻找篮球。

    如果您想要任何位置类别组合的永久链接,这显然是不够的。

    【讨论】:

    • 谢谢 henrym,我过去使用过 cookie 和 session,但我希望能够轻松复制和粘贴 url,以便人们在发现有趣的东西时可以将 URL 发送给彼此。此外,出于 SEO 的目的,我希望在 URL 中包含所有内容。再次感谢。
    【解决方案3】:

    在考虑了一段时间后,我发现(对我来说)最好的解决方案是让一个字符串在一个干净的 URL 中保存我需要的所有参数。

    因此,当用户第一次访问 http://foo.com/ 时,他们会看到一个可供选择的位置。此时 Cookie 为空。

    因此,用户继续选择 United-State,URL 将类似于 http://foo.com/12334_0_0_0/United-States/,并且位置 cookie 设置为 1234,即美国位置的 id。

    现在用户选择加利福尼亚,URL 更改为http://foo.com/1235_0_0_0/United-States-California/,cookie 从美国替换为 1235,即加利福尼亚位置的 id。此时用户选择电子产品类别。因此 URL 更改为 http://foo.com/1235_3333_0_0/Electronics/ 并且 3333 保存在类别 Cookie 中。

    如果用户下拉到单反相机,那么他/她会看到http://foo.com/1235_3344_0_0/SLR-Cameras/

    这样,URL 的第一部分最多可以跟踪 4 个可以传递的参数,并且名称(slugs)仅用于演示和 SEO。

    我认为这行得通吗?将 URL 的 x_y_z_p 部分编码为一些随机文本并解码回参数和数字会很酷。

    让我知道你的想法?

    【讨论】:

    • 你不应该创建foo.com/12334_0_0_0。这应该可以正常工作foo.com/12334,除非您需要知道 12334 是 x 而不是例如 y(在这种情况下,您可以制作 foo.com/0_12334 甚至 foo.com/_12334)。 ID 没有意义,所以尽量不要让 URL 的 ID 部分膨胀。另外我会将下划线更改为逗号(但这完全取决于您的喜好)
    • 还有……还有一件事。为什么要将 URL 编码为随机文本?
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多