【发布时间】: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