Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 데이터 엔지니어링
- airflow
- TCP
- 데이터 파이프라인
- 정리
- AWS
- 컴퓨터네트워크
- 종류
- Docker
- linux
- sql
- S3
- TIL
- HADOOP
- dockerfile
- 운영체제
- redshift
- airflow.cfg
- PYTHON
- 컴퓨터 네트워크
- 가상환경
- http
- 자료구조
- 데이터베이스
- Django
- 데브코스
- 데이터엔지니어링
- 데이터 웨어하우스
- Go
- 파이썬
Archives
- Today
- Total
홍카나의 공부방
[DE 데브코스] 04.25 TIL - Django 템플릿 & 뷰 본문
View와 Template의 기본 사용 예시
# views.py:
from django.shortcuts import render
from django.http import HttpResponse
from polls.models import Question
def index(request):
# 쿼리셋을 정리하기 위한 method = order_by. 내림차순이 default
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'first_question': latest_question_list[0]}
return render(request, 'polls/index.html', context=context) # 템플릿 파일 렌더링
def some_url(request):
return HttpResponse("you request some_url.")
# index.html
# context로 뷰에서 템플릿에 전달한 변수 명을 사용할 수 있음.
<ul>
<li>{{first_question}}</li>
</ul>
- {% for %}문이나 {% if %} 문으로 템플릿에서 제어문을 사용할수도 있다.
- 템플릿에서 역참조를 이용하여 object를 표현할 수 있는데, 템플릿 제어문을 사용할 때는 callable 형식을 사용하지 않는다.
<!-- 역참조 및 템플릿 제어문 not callable 작성 예시 -->
<h1>{{question.question_text}}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{choice.choice_text}}</li>
{% endfor %}
</ul>
- 링크를 추가할 때 <a> 태그를 사용하게 되는데, 여러가지 방법이 있다.
- url을 이용할 때는 urls.py의 appname과 path의 name을 참조해야 한다.
<!-- urls.py의 appname과 path의 name을 참조함. ex) polls:detail -->
<a href="{% url 'detail' q.id %}">{{q}}</a>
<a href="/polls/{{q.id}}">{{q}}</a>
ERROR - 404, 500
- HTTP 404 에러는 보통 HTTP Request에서 찾을 수 없는 페이지나 자원을 요청했을 때 발생한다.
- 분명 서버에 만들어둔 url이 없어서 404를 띄워야함에도 불구, 장고에서는 500 에러를 띄우는 경우가 있다.
- objects.get(pk=id)로 객체를 찾을 수 없을 때 Django에서는 500 에러를 띄우는 것이다.
- 이때는 try - except를 사용해서 강제로 404 Error를 띄우는 방법을 사용할 수 있다.
- 혹은 django.shortcut의 get_object_or_404 method를 이용하여 404를 띄우면 된다.
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question': question})
FORM
- 템플릿에서 특정 양식을 작성할때 <form> 태그를 사용하면 된다.
- {% csrf token %}을 빼먹지 맙시다.
- 아래와 같이 try-except를 활용하여 에러를 방어할 수 있다.
- 에러를 방어할 때는 온갖 상상력을 발휘하여 코드를 작성해야 한다.
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'polls/detail.html', {'question': question, 'error_message': '선택이 없습니다.'})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:index'))
반응형
'Data Engineering > 프로그래머스 데브코스' 카테고리의 다른 글
[DE 데브코스] 04.27 TIL - Django: User와 Authentication, Git의 기능 (0) | 2023.04.27 |
---|---|
[DE 데브코스] 04.26 TIL - Serializer (0) | 2023.04.26 |
[DE 데브코스] 04.24 TIL - Django 기초 (0) | 2023.04.24 |
[DE 데브코스] 04.21 TIL - 야구 잘하는 팀 시각화, Seaborn, WordCloud (0) | 2023.04.21 |
[DE 데브코스] 04.20 TIL - 좋은 코드를 작성하려면?, Selenium (0) | 2023.04.20 |