Project1 - Wikipedia 및 Django 첫 번째 보기



Google 검색 프런트 엔드를 만드는 HTML 및 CSS 프로젝트0 이후 프로젝트1은 Django를 사용하여 Wikipedia와 같은 온라인 백과사전 백엔드를 설계하는 것입니다.

▶️ 배경

The first impression on Django is surprisingly not as bad as I would have thought. I have used NodeJS and ReactJS before and frankly did had some skepticism towards the ease of use of Django.

To my pleasant surprise, aside from a little getting used to Django isn't actually that convoluted. To be fair, I am used to using Python as that is my "day job" language. And I have to add on that the documentation of Django feels overwhelming with a lot of features.

▶️ 프로젝트1에 뛰어들기

A little background before going into details of the 7 specifications required to complete this Wikipedia-like online encyclopedia project. The wiki pages are organized as individual markdown files with its filename as its title. Below is the directory overview:


녹색으로 표시된 entry.html 및 notfound.html을 제외하고 위에 표시된 모든 파일이 제공됩니다. 이 GIF는 내가 지금까지 수행한 작업을 요약한 것입니다.


즉, 다음과 같은 처음 두 가지 사양을 수행했습니다.
  • 항목 페이지: Visiting /wiki/TITLE , 여기서 TITLE는 백과사전 항목의 제목이며 해당 백과사전 항목의 내용을 표시하는 페이지를 렌더링해야 합니다.
  • 보기는 적절한 util 함수를 호출하여 백과사전 항목의 내용을 가져와야 합니다.
  • 존재하지 않는 항목이 요청된 경우 요청한 페이지를 찾을 수 없음을 나타내는 오류 페이지가 사용자에게 표시되어야 합니다.
  • 항목이 존재하는 경우 사용자에게 항목 내용을 표시하는 페이지가 표시되어야 합니다. 페이지 제목에는 항목 이름이 포함되어야 합니다.

  • 색인 페이지: 업데이트index.html를 통해 단순히 백과사전의 모든 페이지 이름을 나열하는 대신 사용자가 항목 이름을 클릭하면 해당 항목 페이지로 바로 이동할 수 있습니다.

  • 1️⃣ 첫 번째 사양

    In order to display the correct entry when /wiki/TITLE is requested:

    • views.py needs to handle the request
    • urls.py of the encyclopedia app need to route to the correct function in the views.py

    백과사전/views.py

    Here, the markdown2 python packageentry.html 로 렌더링되는 마크다운 위키 항목을 변환하는 데 사용됩니다.

    # encyclopedia/views.py
    
    import markdown2
    # ...
    def topic(request, title):
        mdStr = util.get_entry(title)
        if mdStr:
            html = markdown2.markdown(mdStr)
            return render(request, "encyclopedia/entry.html", {
                "title": title,
                "content": html
            })
        else:
            return render(request, "encyclopedia/notfound.html", {
                "message": f"Error: Wiki page titled '{title}' not found"
            })
    # ...
    


    백과사전/urls.py

    # encyclopedia/urls.py
    # ...
    urlpatterns = [
        # ...
        path("wiki/<str:title>/", views.topic, name="topic"),
        # ...
    ]
    

    2️⃣ 2차 사양

    The second specification is much more straight forward, this documentation example Django는 topic에서 지정한 urls.py 경로를 자동으로 사용하는 앵커 링크를 HTML로 만드는 방법을 보여줍니다.

    더 나은 설명을 위해 문서의 예를 보여줍니다.

    from django.urls import path
    
    from . import views
    
    urlpatterns = [
        #...
        path('articles/<int:year>/', views.year_archive, name='news-year-archive'),
        #...
    ]
    


    HTML 템플릿 코드에서:

    <a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>
    {# Or with the year in a template context variable: #}
    <ul>
    {% for yearvar in year_list %}
    <li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
    {% endfor %}
    </ul>
    


    이것이 이 게시물의 전부입니다! 이번에는 내가 배운 내용을 더 자세히 공유할 생각을 했기 때문에 시간이 더 깁니다. 도움이 되었기를 바라며 개선 사항이나 다른 언어를 사용하여 얼마나 쉽게 달성할 수 있는지 자유롭게 논의하십시오 😉

    좋은 웹페이지 즐겨찾기