목적은 

데이터를 입력할 때의 폼과 그 데이터를 수정할 때의 폼동일하게 쓰인다는 점에서,

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호출하도록 조건을 내세워 "추가하기" 텍스트를 "수정하기" 형태로 바꾼다.

블로그 이미지

쵸잇

,