IT 툴툴

[Django파이썬웹프로그래밍] 05 실습 예제 확장하기 - 5.2~5.3

은듄 2021. 11. 27. 06:30
반응형

다움은 루트 페이지를 추가하는 것부터 시작!!


5.2 프로젝트 첫 페이지 만들기


( / ) 루트 페이지를 만들어보자  

 

5.2.1 프로젝트 첫 페이지 설계

 

[그림05_06] 프로젝트 첫 페이지 - UI 설계

5.2.2 URLconf 코딩하기

 

urls.py 에 추가하기 하기

( 클래스 뷰 참고! )

# cd 프로젝트폴더/urls.py

from django.contrib import admin
from django.urls import path, include
from kej_test import views	# 추가

#from django.urls import path
#from polls import views

urlpatterns = [
    ...
    
    path('', views.HomeView.as_view(), name='home'), # 추가
    
    ...
    
]

 

5.2.3 View 코딩하기

 

views.py 에 클래스뷰 추가하자

# cd 프로젝트폴더/views.py

from django.views.generic.base import TemplateView


#--- TemplateView
class HomeView(TemplateView):

    template_name = 'home.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['app_list'] = ['polls', 'books']
        return context

5.2.4 Template 코딩하기

 

template 폴더에 home.html 을 추가하자 ( base.html 상속 )

# cd 프로젝트폴더/templates/home.html

{% extends "base.html" %}

{% block content %}
    <h2>KEJ Django Applications</h2>
    <ul>
        {% for appname in app_list %}
{% with appname|add:":"|add:"index" as urlvar %}
            <li><a href="{% url urlvar %}">{{ appname }}</a></li>
{% endwith %}
        {% endfor %}
    </ul>
{% endblock content %}

5.2.5 지금까지 작업 확인하기

 

(/) 루트 접속해보기

[그림05_07] 루트(/) 접속 화면

 

5.2.6 apps.py 활용 맛보기

 

프로젝트 일반적인 settings.py파일이고,  

앱마다 필요한 항목을 설정할 수 있는 곳은 apps.py 파일이다.

 

 

# cd 프로젝트폴더/books/apps.py

from django.apps import AppConfig


class BooksConfig(AppConfig):
    name = 'books'
    verbose_name = 'Book-Author-Publisher App'  # 추가
# cd 프로젝트폴더/views.py

from django.views.generic.base import TemplateView
from django.apps import apps    # 추가


#--- TemplateView
class HomeView(TemplateView):

    template_name = 'home.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        #context['app_list'] = ['polls', 'books']
        
        # 아래 5줄 추가
        dictVerbose = {}
        for app in apps.get_app_configs():
            if 'site-packages' not in app.path:
                dictVerbose[app.label] = app.verbose_name
        context['verbose_dict'] = dictVerbose

        return context
# cd 프로젝트폴더/templates/home.html

{% extends "base.html" %}

{% block content %}
    <h2>DUNN Django Applications</h2>
    <!-- <ul>
        {% for appname in app_list %}
{% with appname|add:":"|add:"index" as urlvar %}
            <li><a href="{% url urlvar %}">{{ appname }}</a></li>
{% endwith %}
        {% endfor %}
    </ul> -->

    <ul>
        {% for key, value in verbose_dict.items %}
            <li><a href="{% url key|add:':index' %}">{{ value }}</a></li>
        {% endfor %}
    </ul>
    
{% endblock content %}

위에 3곳을 수정하면, apps.py를 활용하기 위한 기본 세팅은 끝났고,

 

 

 

그대로 실행하면 애플리케이션 모듈을 참고하여

 

apps 네임을 하드코딩하지 않고, View와 Template에 반영할 수 있다!

 

 

# cd 프로젝트폴더/settings.py

...

INSTALLED_APPS = [
    ...
    'books.apps.BooksConfig', # 해당 줄 주석 풀고, 아랫줄 주석 처리 후 하면 /books/apps.py에 설정한 verbose_name 명칭을 가져다 씀.
    #'books',    # 해당 줄 주석 풀고, 윗줄 주석 처리 후 하면 여기에 설정한 'books' 모듈 명칭을 그대로 가져다 씀. 

]

...

 

[그림05_08] 설정한 verbose_name 을 쓰도록 설정한 경우

 

 

그러면 이번엔 INSTALLED_APPS의 설정한 apps 네임에 따라서도

 

apps 네임을 하드코딩하지 않고, View와 Template에 반영할 수 있다!

# cd 프로젝트폴더/settings.py

...

INSTALLED_APPS = [
    ...
    #'books.apps.BooksConfig', # 해당 줄 주석 풀고, 아랫줄 주석 처리 후 하면 /books/apps.py에 설정한 verbose_name 명칭을 가져다 씀.
    'books',    # 해당 줄 주석 풀고, 윗줄 주석 처리 후 하면 여기에 설정한 'books' 모듈 명칭을 그대로 가져다 씀. 

]

...

[그림05_09] Books 모듈 애플리케이션 네임을 그대로 쓰도록 설정한 경우

 


5.3 polls 애플리케이션 - 클래스형 뷰로 변경하기


요건 한번 5.1~5.2를 참고하여 실습해보자!

 

 

그럼 끗~(찡끗)

 

반응형