목적은
데이터를 입력할 때의 폼과 그 데이터를 수정할 때의 폼이 동일하게 쓰인다는 점에서,
1개의 폼 사용을 유지하고자 템플릿을 서로 만들지 않고 같은 템플릿을 사용하게 한다.
조건 2가지
1) url 경로와 view 함수는 서로 달라야한다. (기능이 다르므로)
2) 서로 다른 기능을 하는 것임을 표시할 수 있도록 조건에 따라 다르게 화면에 보여야한다.
1-1) url과 view 함수를 따로 만든다.
서로 다른 경로를 가지고, 서로 다른 기능을 유지하기에 고유의 url와 view 함수를 지닌다.
1-2) 매핑할 템플릿 페이지를 동일하게 지정한다.
(데이터 추가하는 add 함수)
1 2 3 4 | def add(request): ctx = {} (생략) return render(request, "add.html", ctx) | cs |
(데이터 수정하는 edit 함수)
1 2 3 4 | def edit(request): ctx = { "replacement" : "수정" } (생략) return render(request, "add.html", ctx) | cs |
2) 기존 템플릿에서 조건문을 추가한다.
(데이터 추가 텍스트만 보이는 템플릿)
1 2 3 4 5 6 | 추가하기 <form enctype="multipart/form-data" method="post" action=""> {% csrf_token %} {{ form.as_p }} <button class="btn btn-default btn-block">추가</button> </form> | cs |
(조건문을 넣어서 사용하는 함수에 따라 다르게 보이는 템플릿)
1 2 3 4 5 6 | {% if replacement %}{{ replacement }}{% else %}추가{% endif %}하기 <form enctype="multipart/form-data" method="post" action=""> {% csrf_token %} {{ form.as_p }} <button class="btn btn-default btn-block">{% if replacement %}{{ replacement }}{% else %}추가{% endif %}</button> </form> | cs |
edit 함수를 매핑하는 url로 접속시 replacement를 호출하도록 조건을 내세워 "추가하기" 텍스트를 "수정하기" 형태로 바꾼다.
'코딩 연습 > Django' 카테고리의 다른 글
로그인하지 않은 경우에는 접근 금지 (0) | 2018.12.05 |
---|---|
객체 지우기 (0) | 2018.12.02 |
이미지를 저장하기(DB, Form, Url, Settings) (0) | 2018.12.02 |
쿼리 연습하기 (0) | 2018.12.01 |
모델 폼에서 입력한 데이터를 다시 불러 수정하기 (0) | 2018.12.01 |