使用破折号在 django url 中传递多个值

Passing multiple values in a django url with dashes

我正在通过 url 将多个值传递给视图。通过一些盲目的运气(阅读经验丰富的调试 (:) 我解决了一个问题,即视图以意想不到的方式解释参数。旧的 url 看起来像:

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 的值是两个单词,而调用的 url 看起来像这样:

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

在我的 display_feed 视图中,location_name 的值将是:

Angeles

这在尝试查询数据并将其显示在页面上时造成了明显的问题。

当我重新排列 url 的顺序以将 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'),    

并更新了视图以与上述更改相对应,逻辑运行顺畅,数据按预期显示在页面上。

我认为 url 的结构存在问题,但我不想把这归咎于缺乏经验并在没有首先了解我做错了什么的情况下继续前进。

我认为问题在于您在没有明确分隔符的情况下将大量信息放在同一个地方。您使用“-”分隔您的值,但在多词名称的情况下,您也使用“-”作为分隔符,这可能会导致意外结果。如果您要保持相同的结构,请用“_”或其他名称分隔您的多词名称。

可能有更好的方法,就像上面指出的那样:querystring。 你可以把它们写在字典上,以后再用,你就不会有那个问题了。

另一种方法可能是用不同的字符分隔您的 args,因此您的网址看起来像“/explore/90/LA/Los-Angeles/0/”。这是它在 django 教程中显示的方式,比您的方法更清晰。