본문 바로가기

PYTHON/Django

Django 장고 시작하기 - 뷰, 템플릿, 관리자페이지 커스텀

728x90

<뷰> - 함수형 뷰와 리스트 뷰가 있음

1.

views.py

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView

from .models import Bookmark
class BookmarkListview(ListView):
    model = Bookmark

2.url 연결 - 어떤 주소를 입력했을 때 뷰가 보일 것인지 연결 (앱 urls.py에 설정 후 루트 urls.py에서 import)

  • django3부터는 import url 대신 path사용... 이걸로 엄청 헤맸다.....

config/urls.py

from django.urls import path, include
urlpatterns=[
    path('bookmark/', include('bookmark.urls')), // localhost:8000/bookmark/이하주소(여기서부터는 bookmark.urls파일에서 찾겠다는 의미)

]

bookmark/urls.py (새로 직접 생성)

from django.urls import path
from .views import BookmarkListView(뷰 종류에 따라서)

url patterns=[
    path('', // bookmark/ 이하부분이 없고 이때 뷰를 호출하겠다는 뜻
    BookmarkListView.as_view(),// 이 뷰를 호출하겠다! class뷰일때 as_view()쓴다고 함
    name='list')
]

템플릿 파일

앱폴더 / templates / 앱이름 / HTML File 형태로

{{ 변수명 }}
{% 소스코드 %}

두개만 알아도 ..!

{% endfor %}
{% endif %}

for문과 if문은 코드가 끝났다고 알려줘야 한다.

{% csrf_token %}

form 안에는 무조건 넣어주기

{{form.as_p}}

각 필드의 폼 태그를 p태그로 감싸 출력해줌

href="{% url 'add' %}"

bookmark에서 링크클릭후 bookmark/add 됨

.
.

템플릿 확장

BLOCK 태그로 다른 템플릿에서 껴넣을 공간 만든다

template/bookmark/html파일

{% extends 'base.html' %}

.
root/templates/base.html

{% block title %} 제목 {% endblock %}
{% block content %} 내용 {% endblock %}

.
config/setting.py에 추가

'DIRS' : [
    os.path.join(BASE_DIR, "templates"),
]

관리자 페이지 커스텀

ex) admin.py

class PhotoAdmin(admin.ModelAdmin):
    list_display=[..]
    raw_id_fields =
    list_filter =..
    search_fields =
    ordering =

admin.site.register(Photo.PhotoAdmin)

..
밑에는 아직 내가 완벽히 이해 못한 부분들

models.py

from django.urls import reverse
def get_absolute_url(self):
    return reverse('detail', args=[str(self.id])

reverse : URL패턴의 이름과 추가인자를 전달받아 URL생성
수정이 완료된 후 이동할 페이지는 뷰에 success_url(reverse_lazy('..'))이 설정되어 있거나 모델에 get_absolute_url이라는 메서드를 통해 결정

.

함수형 뷰 만들기

def photo_list(request): //request는 기본 매개변수 
    photos = photo.objects.all() // DB의 모든 사진 불러옴
    return render(request. 'photo/list.html', {photos:photo}) // list.html을 렌더링(photos 템플릿 변수 전달)

'PYTHON > Django' 카테고리의 다른 글

Django 장고 시작하기 -기본세팅, 앱, 모델  (0) 2020.03.06