
출석부 생성을 버튼 누른 후 어느 url과 views에 연결되어 기능하는지 확인 완료
Html <form method="POST" action="date/"> /(백슬래쉬)의 위치 확인하고 app urls.py 에서 설정한 경로와 동일해야함Grade model 생성 후 member model에 FK 부여
출석을 체크 내용을 chck 함수가 어떻게 처리하는지 확인
이슈 출석 체크 후 웹이 chk/ 경로가 하나 더 붙어
attendace_check.html 출력되고 이후에 출석을 하려면 라우팅된 경로와 맞지 않게 되어 오류 출력
이유 : form에서 절대 경로와 상대경로 지정의 차이.
form의 action 속성이 "chk/"와 같이 상대 경로로 설정되어 있을 때, 해당 폼을 제출하면 현재 페이지의 경로에 상대적으로 chk/를 추가하여 전체 URL을 생성합니다. 이로 인해 기대치와 다른 URL이 생성되어 라우팅이 제대로 이루어지지 않을 수 있습니다.
form의 action 속성에 절대 경로를 설정하면 해당 경로는 고정됩니다. 따라서 폼이 제출되었을 때 현재 페이지의 URL에 영향을 받지 않고 항상 설정된 절대 경로로 데이터가 전송됩니다.
예를 들어, 현재 페이지의 URL이 http://127.0.0.1:8000/checking/date/이고 폼의 action을 {% url 'chk' %}로 설정했다면, 폼을 제출하면 항상 http://127.0.0.1:8000/checking/date/chk/로 데이터가 전송됩니다. 이렇게 하면 현재 페이지의 URL에 상대적인 경로가 고려되지 않으며, 항상 절대 경로로 제출이 이루어집니다.
해결 : django에서 동적 경로 변경
# urls.py
from django.urls import path
from .views import chk
urlpatterns = [
path('chk/', chk, name='chk'),
]
<!-- 템플릿에서 절대 경로 지정 -->
<form method="POST" action="{% url 'chk' %}">
<!-- 폼 요소들 -->
</form>
# model 작성
class GetImage(models.Model):
name = models.CharField(max_length=50)
image = models.ImageField(blank=True, upload_to="checking/getimage/%Y/%m/%d")
description = models.TextField()
def __str__(self):
return self.name
# admin 등록
@admin.register(GetImage)
class GetImageAdmin(admin.ModelAdmin):
list_display = ["id", "name", "description"]
def photo_tag(self, GetImage):
if GetImage.image: # GetImage model 내에 첨부된 사진이 있다면
return mark_safe(f'<img src="{GetImage.image.url}" style="width: 72px;" />')
return None
# tip GetImage.image.url : shell에서 GetImage.object.get(pk=1).image.url로 url 접근할 수 있다.(첨부된 파일이 있는 경우에만 url 접근 가능)
# view에서 poko_image변수에 query 작성후 render context로 전달
def index(request):
poko_image = GetImage.objects.get(pk=2).image.url
return render(request, "checking/index.html", {"poko_image": poko_image})
<!-- style 설정 후 이미지 삽입 -->
<style>
.resized-image {
width: 400px;
height: 300px;
margin: 0 auto; /* 수평 가운데 정렬을 위해 margin을 활용 */
display: block; /* 블록 요소로 설정하여 margin 속성이 적용되도록 함 */
}
</style>
<img src="{{ poko_image }}" alt="POKO" width="" height="300" class="resized-image"> <!-- POKO 이미지 삽입-->
Grade model 작성
외래키 설정
3월 14일 부터 배포를 위한 작업 시작
(2월 13일~3월 13일 완료)