使用短划线在django url中传递多个值

时间:2015-01-30 01:51:43

标签: django django-views django-urls

我通过我的网址向视图传递了几个值。通过一些盲目的运气(阅读经验丰富的调试(:)我解决了一个问题,我的观点是以一种意想不到的方式解释参数。旧网址看起来像:

url(r'^explore/(?P<id>[\w\-]+)-(?P<region>[\w\-]+)-(?P<location_name>[-\w]+)-(?P<page>[\w\-]+)/$',
    'project.apps.web_feed.views.display_feed', name='display_feed'),

我的display_feed视图如下所示:

def display_feed(request, id, region, location_name, page):
    url_scheme = id + '-' + region + '-' + location_name
    print location_name

有几个实例,其中location_name的值是两个单词,并且调用的网址如下所示:

/explore/90-LA-Los-Angeles-0/

在我的display_feed视图中,location_name的值为:

Angeles

这在尝试查询数据并在页面上显示时会引起明显的问题。

当我重新排列网址的顺序时,将location_name作为第一个值,如下所示:

url(r'^explore/(?P<location_name>[-\w]+)-(?P<id>[\w\-]+)-(?P<region>[\w\-]+)-(?P<page>[\w\-]+)/$',
     'heylets.apps.web_feed.views.display_search_feed', name='search_feed'),    

并更新视图以对应上述更改,逻辑可以正常工作,数据按预期显示在页面上。

我认为网址的结构存在问题,但我不想将其归结为缺乏经验并继续前进而没有先了解我做错了什么。

1 个答案:

答案 0 :(得分:0)

我认为问题是你在同一个地方放置了大量信息而没有明确的分隔符。你正在用&#34; - &#34;分隔你的价值观,但是在你使用的多字名称的情况下&#34; - &#34;作为分隔符,也可能导致意外结果。如果要保持相同的结构,请将多个单词的名称与&#34; _&#34;分开。或者不同的东西。

可能有更好的方法,例如指出:querystring。 你可以将它们放在字典上并在以后使用它们,但你不会遇到这个问题。

另一种方法可能是将您的args与不同的char分开,因此您的网址看起来像&#34; / explore / 90 / LA / Los-Angeles / 0 /&#34;。这是它在django教程中显示的方式,比你的方法更清晰。