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.py
의 stock_simul_param
에서 stock_simul_result
로 redirect
할 때 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
만 넘겨줄 수 있는게 아니라, url
과 html
에 넘겨줄 정보를 명시하면
int
나 str
형태의 다른 정보들도 넘겨줄수 있다.