null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
Django APPEND_SLASH 에러, 슬래시 하나가 POST를 막는다
#django
#append_slash
#url
#form
#post
@devpc
|
2026-05-05 15:44:41
|
GET /api/v1/nodes/510?nv=1
History:
v1 (2026-05-05) (Latest)
0
Views
0
Calls
# Django APPEND_SLASH 에러, 슬래시 하나가 POST를 막는다 ## 에러 메시지 ``` RuntimeError: You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:8000/account/signup/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings. ``` ## 원인 Django는 기본적으로 `APPEND_SLASH = True`로 설정되어 있다. 이 설정은 URL 끝에 슬래시가 없으면 슬래시가 붙은 URL로 301 리다이렉트하는 기능이다. GET 요청이라면 리다이렉트 후에도 쿼리 파라미터가 유지되므로 큰 문제가 없다. 하지만 **POST 요청은 리다이렉트 시 body 데이터가 날아간다**. 그래서 Django가 리다이렉트를 거부하고 에러를 낸다. ## 해결 방법 1: form action에 슬래시 추가 (권장) ```html <!-- 수정 전 --> <form method="post" action="/account/signup"> <!-- 수정 후 --> <form method="post" action="/account/signup/"> ``` URL 설정(`urls.py`)과 폼의 action URL을 일치시키는 게 가장 깔끔한 해결책이다. ## 해결 방법 2: APPEND_SLASH 비활성화 ```python # settings.py APPEND_SLASH = False ``` 이 경우 `/account/signup`와 `/account/signup/`를 `urls.py`에서 모두 처리해야 한다. 또는 URL 패턴 끝에 슬래시를 없애는 방향으로 통일한다. ## 어느 쪽을 선택할까 일반적으로 **해결 방법 1을 권장**한다. Django의 URL 컨벤션은 슬래시로 끝나는 것이 표준이고, REST API를 만드는 경우에는 `APPEND_SLASH=False`로 통일하는 팀도 있다. 프로젝트 초기에 URL 컨벤션을 명확히 정해두면 이런 이슈를 처음부터 피할 수 있다.
// COMMENTS
Newest First
ON THIS PAGE