在带有破折号的django url中传递多个值

在带有破折号的django url中传递多个值,django,django-views,django-urls,Django,Django Views,Django Urls,我正在通过我的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=

我正在通过我的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'),
有几个实例中,location_name的值为两个单词,调用的url如下所示:

def display_feed(request, id, region, location_name, page):
    url_scheme = id + '-' + region + '-' + location_name
    print location_name
/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(r'^explore/(?P[-\w]+)-(?P[\w\-]+)-(?P[\w\-]+)-(?P[\w\-]+)/$”,
'heylets.apps.web\u feed.views.display\u search\u feed',name='search\u feed'),
并更新视图以符合上述更改,逻辑工作正常,数据按预期显示在页面上


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

我认为问题在于你在同一个地方放置了大量信息,没有明确的分隔符。你用“-”分隔了你的值,但如果多个单词的名称也使用“-”作为分隔符,则可能会导致意外结果。如果要保持相同的结构,请使用“\u1”或其他不同的分隔符分隔多个单词的名称

可能会有更好的方法,就像一位指出的那样:。 你可以把它们写在dict上,以后再使用,你就不会有这个问题了


另一种方法是使用不同的字符分隔arg,使您的URL看起来像“/explore/90/LA/losangeles/0/”。这是django教程中显示的方式,比您的方法更简洁。

您应该将这归咎于经验不足,并在URL中使用ID或SLUG。如果您绝对必须在URL中传递数据,请在构建URL时使用查询字符串和URL编码。出于对所有神圣内容的热爱,请勿使用相同的字符作为分隔符呃,作为一个逃避角色。这是有道理的,非常感谢@cdvv7788