주니어 데이터 엔지니어 우솨's 개발일지

뷰(View)와 템플릿(template) 본문

Django

뷰(View)와 템플릿(template)

우솨 2024. 4. 28. 13:04

뷰(Views)와 템플릿(Templates)
render함수
Django의 내장 함수 중 하나로, HTTP 요청을 받아 해당 요청에 대해 원하는 템플릿 파일을 렌더링하여 응답하는 기능을 가지고 있다.
render() 함수는 보통 Django의 뷰(View)에서 사용되며, 첫 번째 인자로 요청(Request) 객체, 두 번째 인자로 템플릿 파일의 경로, 그리고 세 번째 인자로 Context 변수를 입력 받는다.

polls/view.py
from .models import *
from django.shortcuts import render

def index(request) :
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'first_question': latest_question_list[0]}
    return render(request, 'polls/index.html', context)

views에서 for문,if문 쓰는법(html)
{% if questions %}
<ul>
    {% for question in questions %}
    <li>{{question}}</li>
    {% endfor %}
</ul>
{% else %}
<p>no question</p>
{% endif %}

{% %} 안을 채워준다

detail 링크 넣기 (a태그 사용)
<ul>
    {% for question in questions %}
        <li><a href="{% url 'questions:question_detail' question.id%}">{{question.question_text}}></a></li>
    {% endfor %}
</ul>

404에러
사용자가 잘못된 요청을 주었을 때 나오는 에러
view.py

from django.shortcuts import get_object_or_404
def detail(request, question_id) :
    question = get_object_or_404(Question,pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

에러방어하기
서버가 항상 정상작동 하는건 아니기 때문에 에러상황이 발생할걸 코드를 작성 해야한다.

 

from django.db.models import F
selected_choice.votes = F('votes') +1
db에서 불러와서 값을 더한다.
(서버에서 동시 연산시 값이 누락되는걸 방지함)


CRUD :
Create, Read, Update, Delete
admin커스터마이징
StackedInline - 오브젝트들을 세로로 나열
TabularInline - 오브젝트들을 가로로 나열
extra - 각 Qustion마다 보여줄 choice의 수를 지정

class ChoiceInline(admin.TabularInline) :
    model = Choice 
    extra = 3 #답변 3개 까지 가능

class QuestionAdmin(admin.ModelAdmin) :
    fieldsets = [
        ('질문 섹션', {'fields' : ['question_text']}),
        ('생성일', {'fields' : ['pub_date'], 'classes' : ['collapse']}),
    ] #collapse - 숨김기능

    readonly_fields = ['pub_date'] #읽기전용
    inlines = [ChoiceInline] #다른 답변 같이 가능

verbose_name - 칼럼의 레이블 변경
search_fields = ['question_text','choice__choice_text'] #검색기능

'Django' 카테고리의 다른 글

Django 기본  (0) 2024.04.28
테스트 기능(Test)  (0) 2024.04.28
유저(User)와 기능(투표, 질문)  (0) 2024.04.28
시리얼라이저(Serializer)와 에러(Error)  (0) 2024.04.28