Demiansoft template(shared_lib)
Project description
shared_lib_ds
demiansoft 홈페이지 템플릿의 공통라이브러리 모음
설치
- pip를 이용해서 앱 설치
pip install shared_lib_ds
- 프로젝트 settings.py에 앱 등록
import os INSTALLED_APPS = [ "jazzmin", # 관리자 페이지 UI 'django.contrib.admin', ... 'shared_lib', 'markdownx', # 블로그 마크다운에디터 'hitcount', # 블로그 히트카운터 'taggit', # 블로그 태그관리 ... ] # 모델에서 이미지 저장을 위해 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # 장고 어드민페이지 커스터마이징 from _data import shared_lib JAZZMIN_SETTINGS = shared_lib.JAZZMIN_SETTINGS MARKDOWNX_MARKDOWN_EXTENSIONS = shared_lib.MARKDOWNX_MARKDOWN_EXTENSIONS MARKDOWNX_MARKDOWN_EXTENSION_CONFIGS = shared_lib.MARKDOWNX_MARKDOWN_EXTENSION_CONFIGS MARKDOWNX_UPLOAD_MAX_SIZE = shared_lib.MARKDOWNX_UPLOAD_MAX_SIZE MARKDOWNX_UPLOAD_CONTENT_TYPES = shared_lib.MARKDOWNX_UPLOAD_CONTENT_TYPES MARKDOWNX_IMAGE_MAX_SIZE = shared_lib.MARKDOWNX_IMAGE_MAX_SIZE
- 프로젝트 urls.py에 다음을 추가한다.
from django.urls import path, include from shared_lib import utils urlpatterns = [ # robots.txt는 반드시 가장 먼저 path('robots.txt', utils.robots), # 기존 URL 패턴들... path('markdownx/', include('markdownx.urls')), ] # 개발 환경에서 미디어 파일 서빙 from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- 프로젝트에 media/폴더를 생성하고 default_modal.bg.webp를 넣어 모달 기본배경으로 사용한다.
- 모델 마이그레이션 생성(모달, 캘린더, 포트폴리오, 블로그 모델 설치)
python manage.py makemigrations shared_lib
- 마이그레이션 적용
python manage.py migrate
- _data/shared_lib.py에 데이터 준비
사용법
< robots.txt >
위의 프로젝트 urls.py 내용만 추가하면 사용가능
< 구글과 네이버 애널리틱스 지원 >
-
프로젝트 최상위 _/data/shared_lib.py에 데이터 준비
-
원하는 앱의 template 파일에 다음을 추가
{% load shared_tags %} {% analytics %}
< 모달창 & 캘린더 띄우기 >
모달창은 총 4가지 타입, 캘린더 1타입이 있음
- 관리자 페이지에서 타입별 모달창 생성후 활성화
- 원하는 앱의 template 파일에 다음을 추가
{% load shared_tags %} {% show_modal %} {% show_calendar %}
< 포트폴리오 details 기능 >
- 앱에 포트폴리오 태그를 생성해서 portfolio_detail에 연결되도록 생성
from django import template from shared_lib.models import PortfolioCategory, Portfolio register = template.Library() @register.inclusion_tag("app/portfolio.html") def portfolio(title, subtitle): categories = PortfolioCategory.objects.all() items = Portfolio.objects.all() context = { 'categories': categories, 'items': items, 'title': title, 'subtitle': subtitle, } return context
- 앱의 views.py에 portfolio_detail 뷰함수 래핑
from shared_lib.views import portfolio_details def app_portfolio_details(request, pk): return portfolio_details(request, pk, 'app/portfolio_details.html', 'Portfolio Details')
- 앱의 urls.py에 portfolio_detail 연결
from django.urls import path from . import views urlpatterns = [ path('portfolio_details/<int:pk>/', views.app_portfolio_details, name='portfolio_details') ]
- porfolio_details html 작성
< 블로그 기능 >
-
앱에 최근 블로그 보여주기 태그를 생성해서 blog_detail에 연결되도록 생성
from shared_lib.models import BlogPost from django import template register = template.Library() @register.inclusion_tag("app/recent-blog-posts.html") def recent_blog_posts(title, subtitle, top_n): posts = BlogPost.objects.filter(status=1).filter(remarkable=True).order_by('-updated_on') context = { 'title': title, 'subtitle': subtitle, 'top_n': posts[:top_n], } return context
-
최근 블로그 보여주는 템플릿 html 추가
-
앱의 views.py에 블로그 뷰클래스 래핑
from shared_lib.views import BlogListView, BlogDetailView, BlogCategoryListView, BlogSearchWordListView, BlogTagListView class AppBlogListView(BlogListView): template_name = "app/_test_blog_list.html" class AppBlogDetailView(BlogDetailView): template_name = "app/_test_blog_detail.html" class AppBlogCategoryListView(BlogCategoryListView): template_name = "app/_test_blog_list.html" class AppBlogSearchWordListView(BlogSearchWordListView): template_name = "app/_test_blog_list.html" class AppBlogTagListView(BlogTagListView): template_name = "app/_test_blog_list.html"
-
앱의 urls.py에 뷰클래스 연결
from django.urls import path from . import views urlpatterns = [ path('blog_list/', views.BlogListView.as_view(), name='blog_list'), path('blog_details/<slug>', views.SharedLibBlogDetailView.as_view(), name='blog_details'), path('blog_category/<str:category_filter>', views.SharedLibBlogCategoryListView.as_view(), name='blog_category'), path('blog_search_word/', views.SharedLibBlogSearchWordListView.as_view(), name='blog_search_word'), path('blog_tag/<str:tag>', views.SharedLibBlogTagListView.as_view(), name='blog_tag'), ]
-
템플릿에서 markdown 사용하기 세팅
{% load shared_tags %} <p>{{ item.formatted_markdown | add_img_class | safe }}</p>
-
블로그 템플릿에서 사이드바 사용하기
{% load shared_tags %} {% sidebar 'app/_sidebar.html' %}
< 블로그, 포트폴리오 사이트맵 지원 >
- 앱의 urls.py에 다음을 추가한다.
from shared_lib.sitemaps import BlogPostSitemap, PortfolioSitemap sitemaps = { "posts": BlogPostSitemap, "portfolios": PortfolioSitemap, } urlpatterns = [ ... ]
< 테스트 페이지 접속하려면 >
http://127.0.0.1:8000/shared_lib/ 로 접속하면 shared_lib 기능을 알수있는 테스트 페이지 접속 이를 위해서 프로젝트의 urls.py에 다음을 추가
from django.urls import path
urlpatterns = [
path('shared_lib/', include('shared_lib.urls', namespace='shared_lib')),
...
]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
shared_lib_ds-1.0.0.tar.gz
(482.4 kB
view details)
Built Distribution
shared_lib_ds-1.0.0-py3-none-any.whl
(585.6 kB
view details)