جانغو تسليط الضوء على تركيب تسبب قضايا شخصية الهروب

StackOverflow https://stackoverflow.com/questions/1607979

سؤال

ولقد تم العمل على بلدي بلوق جانغو أساس (مثل الجميع، وأنا أعلم) لشحذ تصل رسالتي الثعبان، واعتقدت اضاف ان بعض تسليط الضوء على تركيب ستكون كبيرة جدا. نظرت إلى بعض قصاصات من هناك، وقررت أن الجمع بين عدد قليل وكتابة جملة بلدي تسليط الضوء مرشح قالب باستخدام حساء جميلة وPygments. يبدو مثل هذا:

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>

وكان كل هذا تعمل بشكل جيد حتى كان كتلة من التعليمات البرمجية أدرج لي بعض أتش تي أم أل في ذلك. الآن، وأنا أعلم كل أتش تي أم أل أحتاج، لذلك أنا أكتب بلدي بلوق وظيفة مباشرة في ذلك، وعند تقديم إلى القالب، فقط بمناسبة الجسم منصب آمنة:

{{ post.body|pygmentize|safe }}

وهذه النتائج النهج في أي أتش تي أم أل في كتلة رمز فقط مما يجعل ك HTML (أي لا تظهر). لقد لعب حولها مع استخدام وظيفة جانغو الهروب على رمز المستخرجة من الجسم عن طريق مرشح بلدي، ولكن أنا لا يمكن أبدا أن يبدو تماما للحصول على ذلك الحق. أعتقد أن فهم محتوى الهروب فقط ليست كاملة بما فيه الكفاية. لقد حاولت أيضا كتابة النسخة هرب في الجسم آخر (على سبيل المثال <)، لكنه يأتي فقط من أصل كنص.

ما هي أفضل طريقة للاحتفال أتش تي أم أل للعرض؟ أنا ذاهب عن هذا كله غير صحيح؟

وشكرا.

هل كانت مفيدة؟

المحلول

ولقد وجدت أخيرا بعض الوقت لمعرفة ذلك. عندما تسحب حساء جميلة في المحتوى وأنه يحتوي على علامة، يتم سرد العلامة كما عقدة فرعية من قائمة. هذا الخط هو المذنب:

new_content = pygments.highlight(code.contents[0], lexer, formatter)

وو[0] يقطع الجزء الآخر من القانون، لا يتم فك الشفرة بشكل غير صحيح. اكتشاف خلل الفقراء من جهتي. يحتاج هذا الخط لتحل محلها مع:

new_content = pygments.highlight(code.decodeContents(), lexer, formatter)

والدروس هنا تأكد انك تعرف ما هي المشكلة، ومعرفة كيفية عمل المكتبات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top