【问题标题】:Passing multiple values in a django url with dashes在带有破折号的 django url 中传递多个值
【发布时间】:2015-01-30 01:51:43
【问题描述】:

我通过我的 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 的结构存在问题,但我不想将此归咎于缺乏经验并在没有首先了解我做错了什么的情况下继续前进。

【问题讨论】:

  • 您应该将此归咎于缺乏经验,并在 url 中使用 id 或 slug。如果您绝对必须在 URL 中传递数据,请在构建 URL 时使用查询字符串并对数据进行 urlencode。出于对所有神圣事物的热爱,请勿使用相同的字符作为分隔符和转义字符。

标签: django django-views django-urls


【解决方案1】:

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

可能有更好的方法,例如指出的那一点:querystring。 您可以将它们放在 dict 上并稍后使用它们,您不会遇到这个问题。

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

【讨论】:

  • 有道理,非常感谢@cdvv7788
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2012-12-14
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多