[django] 점프 투 장고 - 장고 심화 13, 14

Joy·2020년 6월 30일
0

Django | 점프투장고

목록 보기
20/22

앵커

앵커(anchor) 태그 : URL호출시 원하는 위치로 이동

예를 들어 HTML코드 중간에 <a name="django"></a> 라는 앵커태그가 있다면 이 HTML을 호출하는 URL 뒤에 #django 라고 붙여주면 해당 페이지가 호출되면서 해당 앵커로 스크롤이 이동

답변등록, 답변수정, 댓글등록, 댓글수정시 이 앵커태그를 이용하여 원하는 위치로 이동할 수 있도록 수정하기



답변앵커

답변앵커 추가

템플릿 수정

<a name="answer_{{ answer.id }}"></a>

redirect 수정

뷰 수정

return redirect('{}#answer_{}'.format(
    resolve_url('pybo:detail', question_id=question.id), answer.id))
  • pybo:detail URL에 #answer_2와 같은 앵커태거를 추가하기 위해 format과 resolve_url이 사용
  • resolve_url은 실제 호출되는 URL 문자열을 리턴해주는 장고의 함수

result


답글을 달면 바로 그 부분으로 스크롤 됨 (#)



댓글앵커

동일한 방법으로 댓글 앵커도 추가

댓글앵커 추가

답변 댓글에 앵커태그(<a name="comment_{{ comment.id }}"></a>) 추가

redirect 수정

return redirect('{}#comment_{}'.format(
                resolve_url('pybo:detail', question_id=comment.answer.question.id), comment.id))


마크다운

파이보에 마크다운을 적용하기

마크다운 설치

pip install markdown 으로 마크다운을 설치

마크다운 필터 등록

마크다운으로 작성한 문서를 HTML문서로 변환하기 위해서는 템플릿에서 사용할 마크다운 필터를 작성해야 함

[ pybo_filter.py]

import markdown
from django import template
from django.utils.safestring import mark_safe

@register.filter()
def mark(value):
    extensions = ["nl2br", "fenced_code"]
    return mark_safe(markdown.markdown(value, extensions=extensions))
  • mark 함수 추가 :markdown 모듈과 mark_safe함수를 이용하여 입력된 문자열을 HTML코드로 변환해 주는 필터함수

  • 몇가지 확장기능 중 "nl2br"과 "fenced_code"를 사용

    nl2br 은 줄바꿈 문자를 <br>
    참고 - https://python-markdown.github.io/extensions/

마크다운 적용

  • 탬플릿에 적용하기

{% load pybo_filter %} 추가 -> mark 필터 사용할 수 있게

[quesiton_details]

{% load pybo_filter %}

<div class="card-text">{{ question.content|mark }}</div>

<div class="card-text">{{ answer.content|mark }}</div>
  • 내용 입력 부분 수정 : 스타일 제거하고 mark 필터 적용

결과

profile
roundy

0개의 댓글