데이터 생성 및 템플릿 미세 조정

Django는 소프트웨어 개발의 DRY 원칙 또는 Don't repeat yourself 원칙을 따르며 코드 작성 또는 코드 반복을 최소화하는 것을 목표로 합니다. There's a discussion on the Portland Pattern Repository 문맥에서 이것을 설명합니다. 이 주장은 10세 어린이도 이해할 수 있는 보다 직접적인 설명을 제공했습니다.

모든 지식 조각은 시스템 내에서 단일하고 명확하며 권위 있는 표현을 가져야 합니다.
이를 구현하기 위해 템플릿 디렉토리 내에 부분 디렉토리를 만들고 탐색 모음과 바닥글을 분리합니다. 템플릿 디렉토리는 이제 다음과 같습니다.

현재 템플릿 디렉토리


바닥글은 다음과 같아야 합니다.

# templates/partials/_footer.html
<footer class="py-4 bg-primary text-white-50">
    <div class="container text-center">
        <small>
            Copyright &copy;
            <a class="text-light" href="https://vgreyes.com">
                Heisenberg 2020
            </a>
        </small>
    </div>
</footer>


그리고 navbar에는 다음이 있습니다.

# tempaltes/partials/_navbar.html
<div class="mb-1">
    <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
        <div class="container">
            <a class="navbar-brand" href="{% url 'blog' %}">
                VGReyes
            </a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <a href="{% url 'blog' %}"><span class="navbar-toggler-icon"></a></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav ml-auto">
                    <li {% if request.resolver_match.url_name == 'blog' %}class="nav-item active"{% else %}class="nav-item"{% endif %}>
                        <a class="nav-link" href="{% url 'blog' %}">Home</a>
                    </li>
                    <li {% if request.resolver_match.url_name == 'about' %}class="nav-item active"{% else %}class="nav-item"{% endif %}>
                        <a class="nav-link" href="{% url 'about' %}">About</a>
                    </li>
                    <li {% if request.resolver_match.url_name == 'portfolio' %}class="nav-item active"{% else %}class="nav-item"{% endif %}>
                        <a class="nav-link" href="{% url 'portfolio' %}">Projects</a>
                    </li>
                    <li {% if request.resolver_match.url_name == 'contact' %}class="nav-item active"{% else %}class="nav-item"{% endif %}>
                        <a class="nav-link" href="{% url 'contact' %}">Contact</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
</div>


Django 파일을 밑줄 "_"로 시작하여 파일 이름이 다른 것 외에는 다른 html 파일과 다른 점을 표시하는 것이 좋습니다. 또한 목록 태그 안에 Django 템플릿 언어로 래핑된 if-else 태그가 있음을 알 수 있습니다. 이것은 요청이 urls.py 파일에 이름이 지정된 URL 이름과 일치할 때 활성 부트스트랩 클래스로 변환됩니다.

이제 셸로 이동하여 데이터를 생성해 보겠습니다. 이것을 실행하십시오:
$ python manage.py shell
앱의 블로그 게시물을 만든 다음 프로젝트를 만들어 보겠습니다.

Python 3.8.2 (default, Jun 16 2020, 15:51:47)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.16.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from blog_tutorial.main.models import Post

In [2]: from django.utils import timezone

In [3]: blog_post = Post.objects.create(title="First blog in Django", slug="first-blog-in-django"
   ...: , overview="Echo park squid jean shorts kitsch, af vaporware celiac. Fixie tbh meggings l
   ...: isticle distillery.", body="Listicle ramps you probably haven't heard of them tousled iro
   ...: ny etsy chia put a bird on it shaman. Gentrify glossier sustainable man braid. Squid clou
   ...: d bread biodiesel cliche chambray wolf marfa etsy austin jean shorts.", image="default.pn
   ...: g", created_on="2020-07-27", updated_on="", categories="blog", status="published")

In [4]: blog_post = Post.objects.create(title="Second blog in Django", slug="second-blog-in-djan
    ...: go", overview="Hexagon portland pok pok, succulents put a bird on it cornhole art party
    ...: banjo gentrify kitsch", body="iPhone air plant. Scenester woke snackwave butcher tattooe
    ...: d pug man bun hammock umami poke skateboard truffaut pour-over hell of. Hoodie food truc
    ...: k crucifix squid. Chicharrones skateboard paleo freegan unicorn lomo put a bird on it.",
    ...:  image="default.png", created_on=timezone.now(), updated_on=timezone.now(), status="publ
    ...: ished")

In [5]: blog_post = Post.objects.create(title="Third blog in Django", slug="third-blog-in-django
    ...: ", overview="Humblebrag cronut cloud bread. YOLO beard seitan", body="Tumeric hammock ad
    ...: aptogen letterpress deep v. Small batch migas pickled craft beer bitters listicle shaman
    ...:  iPhone live-edge af fingerstache.", image="default.png", created_on=timezone.now(), upd
    ...: ated_on=timezone.now(), status="published")

In [6]: blog_post = Post.objects.create(title="Woke roof party beard", slug="woke-roof-party-bea
    ...: rd", overview="humblebrag cronut cloud bread. YOLO beard seitan", body="Tumeric hammock
    ...: adaptogen letterpress deep v. Small batch migas pickled craft beer bitters listicle sham
    ...: an iPhone live-edge af fingerstache. Pinterest waistcoat bitters everyday carry quinoa",
    ...:  image="default.png", created_on=timezone.now(), updated_on=timezone.now(), status="publ
    ...: ished")


개체가 생성되었는지 확인하기 위해 Post 개체에 대한 blog_posts 변수를 만듭니다.

In [7]: blog_posts = Post.objects.all()

In [8]: print(blog_posts)
<QuerySet [<Post: First blog in Django>, <Post: Second blog in Django>, <Post: Third blog in Django>, <Post: Woke roof party beard>]>
Let's now create the Category and Project objects

In [9]: from blog_tutorial.main.models import Category

In [10]: blog_category = Category.objects.create(title="blog", slug="blog")

In [11]: blog_category = Category.objects.create(title="python", slug="python")

In [12]: blog_category = Category.objects.create(title="django", slug="django")

In [13]: blog_category = Category.objects.create(title="learnetto", slug="learnetto")

In [14]: from blog_tutorial.main.models import Project

In [15]: project = Project.objects.create(title="Acme", slug="acme", image="default.png", live_si
    ...: te="www.example.com", github_link="https://github.com/acme", description="A site for Acm
    ...: e")

In [16]: project = Project.objects.create(title="Learnetto", slug="learnetto", image="default.png
    ...: ", live_site="www.learnetto.com", github_link="https://github.com/learnetto", descriptio
    ...: n="A web app for Learnetto.")

In [17]: project = Project.objects.create(title="ICVN Tech Studio", slug="icvn-tech-studio", imag
    ...: e="default.png", live_site="www.icvntechstudio.co", github_link="https://github.com/icvn
    ...: techstudio", description="A static site for ICVN Tech Studio")

In [18]: blog_cat = Category.objects.all() 

In [19]: project_list = Projects.objects.all()

In [20]: project_list = Project.objects.all()

In [21]: print(blog_cat)
<QuerySet [<Category: blog>, <Category: python>, <Category: django>, <Category: learnetto>]>

In [22]: print(project_list)
<QuerySet [<Project: Acme>, <Project: Learnetto>, <Project: ICVN Tech Studio>]>


이제 데이터를 생성했습니다. 템플릿에 표시해 보겠습니다.

좋은 웹페이지 즐겨찾기