doctris base template - pai-plznw4me/django-initializer GitHub Wiki

Doctris base template ๊ฐœ๋ฐœ์ž์šฉ ์‚ฌ์šฉ ์„ค๋ช…์„œ

๋ณธ ๋ฌธ์„œ๋Š” doctris web base template ์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ django ์›น ํ”„๋กœ๊ทธ๋žจ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
[git page : layouts](https://github.com/pai-seocho/django-tutorial/tree/master/layouts)

0. ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

  • โš ๏ธ ํ•ด๋‹น ๋ฌธ์„œ๋Š” doctris base template ์„ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์šฉ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค
  • โš ๏ธ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ doctris_base ์„ ์ ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” django ํ”„๋กœ์ ํŠธ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (ํ•ด๋‹น ๋ฌธ์„œ์—์„œ๋Š” doctris_base ์„ ์ ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋ช…์„ my_project ๋ผ ๋ช…๋ช…ํ•ฉ๋‹ˆ๋‹ค.)
  • ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Django ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (๋งŒ์•ฝ ํ•ด๋‹น ์ง€์‹์ด ์—†๋‹ค๋ฉด django-tutorial git wiki > 1.Start ๋‹จ์›์„ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”)
  • ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ์–ป์„์ˆ˜ ์žˆ๋Š” ์ง€์‹์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • doctris base template ์„ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • base template ๋‚ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ•ญ๋ณต๋“ค์„ ์‚ฌ์šฉ์ž ๋ชฉ์ ์— ๋งž๊ฒŒ ๋ณ€๊ฒฝํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • Top navigation
        • dropdown menu ๋ณ€๊ฒฝ
        • ์ด์™ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•
      • Side nvaigation
        • side menu ๋ณ€๊ฒฝ
        • logo ๋ณ€๊ฒฝ
        • side navi content ๋ณ€๊ฒฝ
      • footer
        • footer ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•
      • content
        • content ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

1. ์‹œ์ž‘ํ•˜๊ธฐ

1.1 Clone git repo

1.2 doctris_base app ๋“ฑ๋กํ•˜๊ธฐ

  • django-tutorial > layouts > doctris_base ํด๋”๋ฅผ my_project ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. (ํ”„๋กœ์ ํŠธ ๋ ˆ๋ฒจ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.)

     mv django-tutorial/layouts/doctris_base .
     rm -rf django-tutorial
  • Settings.py INSTALLED_APPS์— app ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

    INSTALLED_APPS = [
    	...    
    	'doctris_base',
    ]
  • project url ์— doctors_base url ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

    urlpatterns = [
    		...
        path('doctris_base/', include('doctris_base.urls'), name='doctris_base'),
    ]
  • ์„œ๋ฒ„ ์‹œ์ž‘ํ•˜๊ธฐ

    python manage.py runserver 

2. ๋ณ€๊ฒฝํ•˜๊ธฐ

2.0 ํด๋” ๊ตฌ์กฐ

{my_project}
   |- doctris_base 
   	|- templates 
   		|- doctris_base
   			|- base.html
   			|- footer.html
   			|- side_navi.html
   			|- top_navi.html

2.1 Top navigation

{my_project}
	|- doctris_base 
		|- templates 
			|- doctris_base
				|- top_navi.html <-- 
  • Top navigation ์€ left side ๋˜๋Š” right side ์— ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    top_navi
  • left side

    • close sidebar
    • Search bar
  • right side

    • close sidebar
    • Search bar

2.1.1 Left side

2.1.1.1 close sidebar ๋ณ€๊ฒฝ

  • {# close sidebar start #} ๊ฒ€์ƒ‰
{# close sidebar start #}
<a id="close-sidebar" class="btn btn-icon btn-pills btn-soft-primary ms-2" href="#">
    <i class="uil uil-bars"></i>
</a>
{# close sidebar end #}

2.1.1.2 Search bar ๋ณ€๊ฒฝ

  • {# search bar start #} ๊ฒ€์ƒ‰
{# search bar start #}
<div class="search-bar p-0 d-none d-lg-block ms-2">
    <div id="search" class="menu-search mb-0">
        <form role="search" method="get" id="searchform" class="searchform">
            <div>
                <input type="text" class="form-control border rounded-pill" name="s" id="s"
                       placeholder="Search Keywords...">
                <input type="submit" id="searchsubmit" value="Search">
            </div>
        </form>
    </div>
</div>
{# search bar end  #}

2.1.1.3 left Side ์— ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • {# left side start #} ๊ฒ€์ƒ‰
<div class="d-flex align-items-center">
    {# left side start #}
    <li class="list-inline-item mb-0 ms-1">
        <div>ํ™๊ธธ๋™</div>
    </li>
    {# left side End #}
</div>

2.1.2 Right Side

2.1.2.1 dropdown menu ๋ณ€๊ฒฝ

  • {# dropdown profile start #} ๊ฒ€์ƒ‰
dropdown
  • {# dropdown profile start #} ๊ฒ€์ƒ‰ํ•ด ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ๋ณ€๊ฒฝ, fix_me ๋ณ€๊ฒฝ
  {# dropdown profile start #}
  <a class="dropdown-item d-flex align-items-center text-dark" href="profile.html">
      {# ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ #}
      <img src="<fix_me>" 
           class="avatar avatar-md-sm rounded-circle border shadow" alt=""> 
      {# ํ”„๋กœํ•„ ์ •๋ณด #}
      <div class="flex-1 ms-2">
          <span class="d-block mb-1">fix_me</span>  <!-- ๋ณ€๊ฒฝ -->
          <small class="text-muted">fix_me</small>  <!-- ๋ณ€๊ฒฝ -->
      </div>
  </a>
	{# dropdown profile end #}

2.1.1.2 Right Side ์— ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • {# Right side start #} ๊ฒ€์ƒ‰
<ul class="list-unstyled mb-0">
{# Right side start #}
{# Right side end #}
</ul>        

2.2 Side navigation

{my_project}
	|- doctris_base 
		|- templates 
			|- doctris_base
				|- side_navi.html <-- 

2.2.1 ๋กœ๊ณ  ๋ณ€๊ฒฝ ๋ถ€๋ถ„

  • {# Logo start #} ~ {# Logo end #} ๋ณ€๊ฒฝ
{# Logo start #}
<div class="sidebar-brand">
    <a href="{% url '{fixme}' %}"> <!-- ๋กœ๊ณ  ํด๋ฆญ์‹œ ์ด๋™๋˜๋Š” ํŽ˜์ด์ง€ -->
        <img src="{% static '{fixme}' %}" height="28" class="logo-light-mode" alt=""> <!-- ๋กœ๊ณ  ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ  -->
    </a>
</div>
{# Logo end #}

2.2.2 ๋ฉ”๋‰ด ๋ณ€๊ฒฝ ๋ถ€๋ถ„

  • <!-- sidebar-menu Start --> ~ <!-- sidebar-menu End --> ์‚ฌ์ด๋ฅผ ๋ณ€๊ฒฝ
    • ๋ฉ”๋‰ด๋Š” nested mene์™€ single menu๋กœ ๊ตฌ์„ฑ
<!-- sidebar-menu Start -->
<ul class="sidebar-menu pt-3">
    {# ์ ‘ํžˆ๋Š” ๋ฉ”๋‰ด #}
    <li class="sidebar-dropdown">
        <a href="javascript:void(0)"><i class="uil uil-user me-2 d-inline-block"></i>fixme_๋ฉ”๋‰ด์ด๋ฆ„</a>
        <div class="sidebar-submenu">
            <ul>
                <li><a href="fixme">fixme_์„œ๋ธŒ๋ฉ”๋‰ด์ด๋ฆ„1</a></li>
                <li><a href="fixme">fixme_์„œ๋ธŒ๋ฉ”๋‰ด์ด๋ฆ„2</a></li>
            </ul>
        </div>
    </li>
    {# ๋‹จ์ผ ๋ฉ”๋‰ด #}
    <li>
        <a href="fixme">
            <i class="uil uil-apps me-2 d-inline-block"></i>
            fixme_๋ฉ”๋‰ด์„ค๋ช…
        </a>
    </li>
</ul>
<!-- sidebar-menu End -->

2.2.3 Side navi content

  • <li>tag ์„ ํ™œ์šฉํ•ด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
<!-- sidebar-content Start -->
    <ul class="sidebar-footer list-unstyled mb-0">
        {# Chatting start #}
        <li class="list-inline-item mb-0 ms-1">
            <a href="#" class="btn btn-icon btn-pills btn-soft-primary">
                <i class="uil uil-comment icons"></i>
            </a>
        </li>
        {# Chatting end #}
				{# ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ์ž‘ #}
	      {# ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ #}
    </ul>
<!-- sidebar-content end -->

2.3 footer

{my_project}
	|- doctris_base 
		|- templates 
			|- doctris_base
				|- footer.html <-- 

2.3.1 footer ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•

  • {# Footer message start #} ~ {# Footer message end #} ๋‚ด ํƒœ๊ทธ ๋ณ€๊ฒฝ
{% load static %}
<!-- Footer Start -->
<footer class="bg-white shadow py-3">
    <div class="container-fluid">
        <div class="row align-items-center">
            <div class="col">
                {# Footer message start  #}
                <div class="copyright">ยฉ Copyrights <a href="https://publicai.co.kr/">PublicAI</a> 2022. All rights
            reserved. Designed by <a
                    href="https://publicai.co.kr/">PublicAI</a></div>
                {# Footer message End  #}
            </div><!--end col-->
        </div><!--end row-->
    </div><!--end container-->
</footer><!--end footer-->

2.4 content

content ์˜์—ญ ์€ base.html ๋‚ด ์ •์˜๋˜์–ด ์žˆ์Œ.

<div class="container-fluid">
    <!-- Start Contnet -->
    {% block contents %}
    {% endblock %}
    <!-- End Contnet -->
</div>

2.4.1 content ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•

  • doctris_base/base.html ์„ ํ™•์žฅ

  • myapp ์— sample.html ์—

    {proejct}
    	|-doctris_base
    	|-myapp
    		|-templates
    			|-myapp
    				|-sample.html  <--- ํ•ด๋‹น ํŒŒ์ผ์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€
    
    {% extends 'doctris_base/base.html' %}
    {% load static %}
    
    {% block contents %}
    <!-- ์—ฌ๊ธฐ์— ์•Œ๋งž์€ ๋‚ด์šฉ์„ ์ถ”๊ฐ€  -->
        "Extended Complete!"
    {% endblock %}
    
    {% block js %}
    {% endblock %}
    • ์‹คํ–‰ ๊ฒฐ๊ณผ extend
โš ๏ธ **GitHub.com Fallback** โš ๏ธ