본문 바로가기

Pyhon/Django

[Pyhon/Django] 장고 기초#011. 장고 CSS(Cascading Style Sheets)

CSS(Cascading Style Sheets)

css는 마크업 언어(HTML과 같은)에서 웹 브라우저에 출력되는 html 파일의 외관을 꾸미는 역할을 합니다. 장고의 CSS는 기존 CSS와 차이점이 없지만, 다음 문서 진행을 위해서 CSS 작업을 선행해야 합니다. 이 문서에서도 CSS에 대한 내용을 다루지는 않고, 참고 튜토리얼을 단순히 따라서 진행하겠습니다. 이 문서에서는 장고 프로젝트에서 정적 파일을 로드하는 방식만 이해하면 충분하기 때문입니다.

튜토리얼에서는 부트스트랩(http://bootstrapk.com/) 프레임워크 3.2.0 버전을 사용합니다. post_list.html 파일에서 다음 head 태그 이하를 추가합니다.

<html>
    <head>
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
    </head>
</html>

다음으로 정적 파일(CSS)을 관리하기 위해서 static 디렉토리를 생성하고, 그 아래 css 디렉토리와 blog.css 파일을 이어서 생성합니다. 현재까지 디렉토리 트리는 다음과 같습니다.

  • helloWorld
    •  blog
      • migrations
      • templates
      • static
        • css
          • blog.css

다시 post_list.html 파일을 열어 다음과 같이 수정합니다. 첫 번째 라인 {% load static %}은 현재 html 문서에서 정적 파일을 로드하는 것이고, 추가된 link 태그는 blog.css 스타일 시트를 포함합니다.

{% load static %}
<html>
    <head>
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <link rel="stylesheet" href="{% static 'css/blog.css' %}">
    </head>
</html>

튜토리얼을 계속 따라 진행하면 CSS에 대한 내용만 포함하고 있으므로, 최종 시안에 대한 내용만 적용하고 마무리 하겠습니다(앞서 소개했듯이 장고 프로젝트에서 정적 파일을 로드하는 방식만 이해하면 충분하기 때문입니다). 최종적으로 post_list.html과 blog.css 내용은 다음과 같습니다.

우선 post_list.html 파일입니다. 아래 내용을 그대로 복사하여 붙여넣습니다.

{% load static %}
<html>
    <head>
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <link href="//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
        <link rel="stylesheet" href="{% static 'css/blog.css' %}">
    </head>
    <body>
        <div class="page-header">
            <h1><a href="/">Blog post list</a></h1>
        </div>
        <div class="content container">
            <div class="row">
                <div class="col-md-8">
                    {% for post in posts %}
                        <div class="post">
                            <div class="date">
                                <p>published: {{ post.published_date }}</p>
                            </div>
                            <h1><a href="">{{ post.title }}</a></h1>
                            <p>{{ post.text|linebreaksbr }}</p>
                        </div>
                    {% endfor %}
                </div>
            </div>
        </div>
    </body>
</html>

다음으로 blog.css 파일입니다. 마찬가지로 아래 내용을 그대로 복사하여 붙여넣습니다.

body {
    padding-left: 15px;
}

h1 a {
    color: #FCA205;
    font-family: 'Lobster';
}

.page-header {
    background-color: #ff9400;
    margin-top: 0;
    padding: 20px 20px 20px 40px;
}

.page-header h1, .page-header h1 a, .page-header h1 a:visited, .page-header h1 a:active {
    color: #ffffff;
    font-size: 36pt;
    text-decoration: none;
}

.content {
    margin-left: 40px;
}

h1, h2, h3, h4 {
    font-family: 'Lobster', cursive;
}

.date {
    color: #828282;
}

.save {
    float: right;
}

.post-form textarea, .post-form input {
    width: 100%;
}

.top-menu, .top-menu:hover, .top-menu:visited {
    color: #ffffff;
    float: right;
    font-size: 26pt;
    margin-right: 20px;
}

.post {
    margin-bottom: 70px;
}

.post h1 a, .post h1 a:visited {
    color: #000000;
}v

만약 스타일 시트가 제대로 적용되지 않으면, 다음 두 가지를 확인합니다.

  • 서버를 재시작합니다.
  • settings.py에서 STATIC_URL(STATIC_URL = '/static/')과 STATIC_ROOT(STATIC_ROOT = os.path.join(BASE_DIR, 'static')) 설정 값을 확인합니다.

다음 사진과 같이 요청(http://127.0.0.1:8000/) 결과로 css가 적용된 html 문서를 렌더링하면 정상적으로 진행한 것입니다.