Hallo,
ich möchte gerne auf einer Site Python-Code mit Pygments darstellen. Wie muss ich da vorgehen? Ich bin für jeden Tip oder jedes Beispiel dankbar.
Grüße
Mawilo
Syntaxhighlighting in Django mit Pygments
Ich habe es so gemacht (meine Seite ist noch nicht online - kommt aber bald)
1.) pygments installieren
2.) Style sheet generieren:
> pygmentize -f html -S emacs > emacs.css
3.) Html generieren:
> pygmentize.exe -f html -O full,style=emacs -o bla.html bla.py
Die div Blöcke kann man dann einfach in die eigenen Seiten kopieren.
Möglicherweise geht es auch einfacher.
1.) pygments installieren
2.) Style sheet generieren:
> pygmentize -f html -S emacs > emacs.css
3.) Html generieren:
> pygmentize.exe -f html -O full,style=emacs -o bla.html bla.py
Die div Blöcke kann man dann einfach in die eigenen Seiten kopieren.
Möglicherweise geht es auch einfacher.
- Mawilo
- User
- Beiträge: 454
- Registriert: Sonntag 22. Februar 2004, 10:58
- Wohnort: Sachsen
- Kontaktdaten:
Auf diese Art habe ich statische Seiten erstellt. Ich würde gerne in so einer Art Blog python-Code eingeben, der dann angezeigt werden soll.
Beispieltemplate:
Mawilo
Beispieltemplate:
Code: Alles auswählen
{% extends "base.html" %}
{% block title %}{{ object }}{% endblock %}
{% block content %}
<h1>{{ object }}</h1>
<p>Syntax: {{ object.get_syntax_display }}<br>
Date: {{ object.timestamp|date:"r" }}</p>
<code><pre >{{ object.content }}</pre></code>
{% endblock %}
@lunar
Ich habe ein zentrales Style sheet. Dort habe ich die pygments Formatierungen hineinkopiert. Aus den generierten Seiten kopiere ich nur die div Blöcke.
@mawilo
Warum formulierst Du Dein Problem nicht gleich konkreter?
Ich habe ein zentrales Style sheet. Dort habe ich die pygments Formatierungen hineinkopiert. Aus den generierten Seiten kopiere ich nur die div Blöcke.
@mawilo
Warum formulierst Du Dein Problem nicht gleich konkreter?
Und wozu dient dann "-Ofull,style=emacs" in Schritt 3?hendrikS hat geschrieben:Ich habe ein zentrales Style sheet. Dort habe ich die pygments Formatierungen hineinkopiert. Aus den generierten Seiten kopiere ich nur die div Blöcke.
@ lunar
Danke für die Anmerkung. Die erwähnten Optionen kann man in meinem Fall weglassen. Aber es ist im Grunde Jacke wie Hose wo ich die div Blöcke rauskopiere.
@ mawilo
Für Deinen Zweck wirst Du wohl das Python Programmierinterface bemühen müssen. Siehe pygments Doku.
Danke für die Anmerkung. Die erwähnten Optionen kann man in meinem Fall weglassen. Aber es ist im Grunde Jacke wie Hose wo ich die div Blöcke rauskopiere.
@ mawilo
Für Deinen Zweck wirst Du wohl das Python Programmierinterface bemühen müssen. Siehe pygments Doku.
Ohne "-O full" musst du nichts "rauskopieren", weil die Datei nur die div-Blöcke enthält. Man kann die Datei also ohne Nachbearbeitung direkt einbetten, z.B. mit "string.Template()".hendrikS hat geschrieben:Danke für die Anmerkung. Die erwähnten Optionen kann man weglassen. Aber es ist im Grunde Jacke wie Hose wo ich die div Blöcke rauskopiere.
Die so erzeugte HTML-Datei enthält doch nur den DIV-Block mit den Syntax-Highlighting, man muss die überflüssigen Elemente also nicht löschen. Folglich kann man diese Datei dann in die HTML-Ausgabe einbetten. Mit was man das tut, hängt davon ab, was man in welcher Umgebung tut. So kann man dafür SSI nutzen, oder sogar clientseitiges Javascript, dass die Codebeispiele dynamisch vom Server holt.
Wenn du das HTML natürlich alles selbst zusammenbaust, ist es tatsächlich egal.
Wenn du das HTML natürlich alles selbst zusammenbaust, ist es tatsächlich egal.
Ich bin mit den Webdingen noch nicht ganz so vertraut. Mein bisheriges Konzept sieht vor. Plain Html + Python für dynamische Inhalte. Wobei ich hier noch am Überlegen bin welche Tools für die danamischen Inhalte sinnvoll und notwendig sind. Im Moment ist noch alles auf die Tippeltappeltour generiert.
Ich habe mir folgende Helper definiert, um Codestücke direkt oder aus Dateien als XHTML-Inhalt einzubinden:
Viel Erfolg damit.
Code: Alles auswählen
from pygments import highlight
from pygments.formatters import HtmlFormatter
from pygments.lexers import get_lexer_by_name, get_lexer_for_filename, \
TextLexer
def get_lexer(arg, is_filename=False):
if is_filename:
lookup = get_lexer_for_filename
else:
lookup = get_lexer_by_name
try:
return lookup(arg)
except ValueError:
return TextLexer()
def format_code_as_html(code, lexer):
"""Parse code with ``lexer``, format as HTML and return the output."""
return highlight(code, lexer, HtmlFormatter())