내 개인적인 장고 기반 블로그 (모두와 마찬가지로)가 내 파이썬을 향상시키기 위해 노력해 왔으며 일부 구문 강조를 추가하는 것이 좋습니다. 거기서 일부 스 니펫을보고 몇 가지를 결합하여 Beautiful Soup and Pygments를 사용하여 고유 한 구문 강조 템플릿 필터를 작성하기로 결정했습니다. 그것은 다음과 같습니다Django 구문 강조로 인해 문자 이스케이프 문제가 발생했습니다
그것은이와 하이라이트 및 광고와 같은 코드 블록 관련 스타일을 찾습니다from django import template
from BeautifulSoup import BeautifulSoup
import pygments
import pygments.lexers as lexers
import pygments.formatters as formatters
register = template.Library()
@register.filter(name='pygmentize')
def pygmentize(value):
try:
formatter = formatters.HtmlFormatter(style='trac')
tree = BeautifulSoup(value)
for code in tree.findAll('code'):
if not code['class']: code['class'] = 'text'
lexer = lexers.get_lexer_by_name(code['class'])
new_content = pygments.highlight(code.contents[0], lexer, formatter)
new_content += u"<style>%s</style>" % formatter.get_style_defs('.highlight')
code.replaceWith ("%s\n" % new_content)
content = str(tree)
return content
except KeyError:
return value
:
<code class="python">
print "Hello World"
</code>
이 있었다 모든 내가 포함 된 코드 블록이 때까지 잘 작동 일부 그것의 html. 지금, 나는 내가 필요한 모든 HTML을 알고, 그래서 그것을 직접 내 블로그 게시물을 작성하고 템플릿에 렌더링 할 때, 단지 안전한 게시물 본문 표시 : 코드에서 모든 HTML에서
{{ post.body|pygmentize|safe }}
이 접근 방식의 결과를 그냥 HTML로 렌더링을 차단합니다 (즉, 표시되지 않음). 내 필터에 의해 본문에서 추출 된 코드 장고 탈출 함수를 사용하여 놀았어요,하지만 나는 그것을 올바르게 얻을 것 결코 꽤 수 있습니다. 콘텐츠 이탈에 대한 이해가 충분하지 않다고 생각합니다. 나는 또한 게시 본문 (예 : <)에 이스케이프 된 버전을 쓰려고했지만 텍스트로 나옵니다.
표시 할 html로 표시하는 가장 좋은 방법은 무엇입니까? 나는이 모든 잘못을 저지르고 있는가?
감사합니다.