0

Djangoでビューからビューにパラメーターを渡したいのですが、最初に3つのパラメーターを渡したときは機能しますが、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'),

ビュー.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))     
4

2 に答える 2

1

URLの正規表現に問題があるようです。

あなたが持っているもの

(?P<city>[-\w])

1 つの数字、単語文字、空白、アンダースコア、またはハイフンのみに一致します。あなたが持つべきものは

(?P<city>[-\w]+)

残りの部分と同じように、1 つ以上に一致します。


もう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ん。

于 2013-04-05T15:18:48.560 に答える