50 장고 마크다운 설치 / 적용 하기

50.1 마크다운 markdownx, Pygments

참고 : https://neutronx.github.io/django-markdownx/example/

마크다운은 복잡한 html을 사용하지 않고 읽고, 쓰는 양식을 간편하게 할 수있게 해준다.

마크다운을 처음 접하는 분은 익숙하지 않아 어렵게 생각할 수 있지만, 적응이 되면 간편하게 글을 작성할 수 있다.

requirements/base.txt 에 django-markdownx 모듈을 추가하고 base.txt 읽어 설치하도록 합니다.

따로 파일을 관리하지 않으시면 pip install django-markdownx로 설치해도 됩니다.

1
2
3
4
5
#https://python-markdown.github.io/extensions/code_hilite/
django-markdownx==3.0.1

#https://pypi.org/project/Pygments/
Pygments==2.8.0

50.2 마크다운 설치하기

가상환경 모드인지 확인하고 django-markdownx 를 설치 합니다.

1
2
pip install django-markdownx==3.0.1
pip install Pygments==2.8.0

50.3 설정파일 변경 - base.py

설정파일 내용에 마크다운을 추가합니다.

설정에 대한 옵션은 https://python-markdown.github.io/

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
DJANGO_BASE_APP = [
    ...
    'markdownx'   
]

MARKDOWNX_MARKDOWN_EXTENSIONS = [
    'markdown.extensions.codehilite',
    'markdown.extensions.fenced_code',
    'markdown.extensions.extra',
    'markdown.extensions.toc'
]

MARKDOWNX_MARKDOWN_EXTENSION_CONFIGS = {
    'markdown.extensions.codehilite': {
        'linenums': True,
        'use_pygments': True,
        'noclasses': True
    }
}

50.4 설정파일 변경 - urls.py

config/settings/urls.py에 markdownx를 등록합니다.

1
path('markdownx/', include('markdownx.urls')),

50.5 마크다운 admin.py

admin 페이지에서 글 작성시 마크다운이 어떻게 표현될지 미리 적용되는 것을 확인 할 수 있습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#myapp/blog/admin.py
from django.contrib import admin

# Register your models here.

from .models import PyBlog, PyBlogDetail
from markdownx.admin import MarkdownxModelAdmin
from markdownx.widgets import AdminMarkdownxWidget
from markdownx.models import MarkdownxField

#admin.TabularInline
class containPythonBlog(admin.StackedInline ):
    model = PyBlogDetail
    extra = 3
    formfield_overrides = {
        MarkdownxField: {'widget': AdminMarkdownxWidget}
    }

class admin_pythonblog(admin.ModelAdmin):
    list_display = ('id','title','regist_dt','update_dt')

    fieldsets = [ 
        (None, { 'fields': ['title'] }),        
    ]
    inlines = [ containPythonBlog ]

admin.site.register(PyBlog, admin_pythonblog)
admin.site.register(PyBlogDetail,MarkdownxModelAdmin)

50.6 사용자정의 필터 만들기

custom template fileter에 마크다운 함수를 추가합나다.

50.7 템플릿 html에 적용하기

formatted_markdown 함수의 파라메터로 넘기면 마크다운 포멧이 적용되어 리턴됩니다.

50.8 브라우저에서 확인하기

링크와 코드블록이 잘 적용되었습니다.^_^

50.9 admin 글입력 가로로 나열하기

TabularInline를 사용하면 입력박스가
가로로 나열됩니다.

StackedInline , TabularInline 편하신거로 쓰시면 좋을것 같습니다.

1
2
3
4
5
6
class containPythonBlog(admin.TabularInline):
    model = PyBlogDetail
    extra = 3
    formfield_overrides = {
        MarkdownxField: {'widget': AdminMarkdownxWidget}
    }