我想在Django中将视图中的参数传递给视图,当我首先传递三个参数时,它可以工作,但是当它超过3个参数不再起作用时。 传递参数时,我有这个错误:
NoReverseMatch at /detail/
Reverse for 'display_filter' with arguments '()' and keyword arguments '{'country': 'USA', 'street': 'Wall Street', 'continent': 'America', 'city': 'new York'}' not found.
urls.py
url(r'^detail/$', 'examples.views.detail'),
url(r'^display_filter/(?P<continent>[-\w]+)/(?P<country>[-\w]+)/(?P<city>[-\w]+)/(?P<street>[-\w]+)/$', 'examples.views.display_filter', name='display_filter'),
views.py
def detail(request):
continents = Select_continent()
if request.method == 'POST':
continent = request.POST.get('combox1')
country = request.POST.get('combox2')
city = request.POST.get('combox3')
street = request.POST.get('combox4')
countries =Select_country(continent)
cities= Select_city(continent,country)
streets = Select_street(continent,country,city)
for row in continents :
if row[0]==int(continent) :
param1 =row[1]
for row in countries:
if row[0]==int(country):
param2=row[1]
for row in cities:
if row[0]==int(city):
param3=row[1]
for row in streets:
if row[0]==int(street):
param4=row[1]
url = reverse('display_filter', args=(), kwargs={'continent':param1,'country':param2,'city':param3,'street':param4})
return redirect(url)
return render(request, 'filter.html', {'items': continents,})
def display_filter(request,continent, country,city, street):
data = Select_WHERE(continent, country, city,street)
#symbol = ConvertSymbol(currency)
return render_to_response('filter.html', {'data': data, }, RequestContext(request))
答案 0 :(得分:1)
看起来这是你的url正则表达式的问题。
你有什么
(?P<city>[-\w])
只匹配1位数,字符,空格,下划线或连字符。你应该拥有的是
(?P<city>[-\w]+)
将与其他人一样匹配1个或更多。
另一件事是你可以尝试改变
url = reverse('display_filter', args=(), kwargs={'continent':param1,'country':param2,'city':param3,'street':param4})
return redirect(url)
到
return redirect('display_filter', continent=param1, country=param2, city=param3, street=param4)
redirect
是一种快捷方式,因此您无需致电reverse
,因为它会为您执行此操作。
答案 1 :(得分:0)
我认为你需要做两件事:
在您的urls.py中添加一个与您的3个参数匹配的网址:
url(r'^display_filter/(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/$', 'examples.views.display_filter', name='display_filter'),
您必须在视图方法中为第四个参数设置默认值:
def display_filter(request, continent, country, city, street=None):
然后,您可以使用三个参数调用URL。