Django NoReverseMatch Error

lightcat·2022년 9월 18일
0

코드

project/urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    # ip:port로 들어오는 모든 접속 요청을 blog.urls로 전송하여 추가 명령 검색
    path('', include('blog.urls')),
    path('', include('stocksimul.urls')),
]

app/urls.py

urlpatterns = [
    path('', views.stock_simul_param, name='stock_simul_param'),
    path('stock/', views.stock_simul_result, name='stock_simul_result')
]

app/views.py

def stock_simul_param(request):
    if request.method == "POST":
        form = StockSimulParamForm(request.POST)
        if form.is_valid():
            stock = form.save(commit=False)
            stock.save()
            return redirect('stock_simul_result',pk=stock.pk)
    else:
        form = StockSimulParamForm()
    return render(request, 'stocksimul/stock_simul_param.html', {'form': form})


def stock_simul_result(request, pk):
    stock = get_object_or_404(StockSimulParam, pk=pk)
    return render(request, 'stocksimul/stock_simul_result.html', {'stock':stock})

위와 같이 stock_simul_param 에서 데이터를 넘겨받아 redirect를 이용하여stock_simul_result로 넘겨주어 처리하는 과정에서 자꾸 에러가 발생하였다.

에러

File "C:\Users\KDH\PycharmProjects\stock-data-analyze\backend\stocksimul\views.py", line 14, in stock_simul_param 
return redirect('stock_simul_result',pk=stock.pk)

django.urls.exceptions.NoReverseMatch: Reverse for 'stock_simul_result' with keyword arguments 
'{'pk': 12}' not found. 1 pattern(s) tried: ['stock/']

다른 사이트의 해결방법을 찾아보면 죄다 내가 에러난 케이스와는 달랐다. 모두 *.html에서 연결하는 url에 파라미터를 입력해주지 않아 발생한다고 하였는데, 나는 html에 url정보 자체를 사용하고 있지 않았다.

다른 에러 케이스 참고 :
https://programmers-sosin.tistory.com/entry/Django-NoReverseMatch-at-Error
https://integer-ji.tistory.com/252


트러블 슈팅

views.pystock_simul_param에서 stock_simul_resultredirect할 때 pk 파라미터를 넘겨주도록 되어있지만,
app/urls.py 에서는 url에 pk정보가 없기 때문에 발생하는 에러였다.

app/urls.py

urlpatterns = [
    path('', views.stock_simul_param, name='stock_simul_param'),
    path('stock/<int:pk>', views.stock_simul_result, name='stock_simul_result')
]

처럼 변경해주면 에러가 사라진다.


pk만 넘겨줄 수 있는게 아니라, urlhtml에 넘겨줄 정보를 명시하면
intstr형태의 다른 정보들도 넘겨줄수 있다.

0개의 댓글