Форум сайта python.su
Сразу признаюсь, да, я не осилил документацию.
начал с html5lib — http://code.google.com/p/html5lib/wiki/UserDocumentation
потом нашел нечто про lxml — http://codespeak.net/lxml/dev/
наткнулся на это, немного не в тему — http://softwaremaniacs.org/forum/django/2350/
А задача стоит так — у меня есть некий код, к примеру вот:
<code lang=“bash”>И хотелось бы уметь заменить lang=“bash” на какой-нибудь class="highlight", а так же сделать strip(), а потом django.utils.html.escape() для текста между <code>. Ну и другие преобразования с тэгами. И да, я совершенно не понимаю, куда смотреть и с чего начать. Пожалуйста, тыкните, пускай грубо, но тыкните. Спасибо за внимание!
[] && echo “good”
patch -p1 < filename.txt
</code>
<user id=“1” />
<article id=“243”>название статьи</article>
Отредактировано (Март 22, 2010 19:16:45)
Офлайн
Этот “код” это xml?
Офлайн
Нет, html.
Офлайн
Получилось примерно вот что:
from applications.blog.models import Article
from django.contrib import admin
def content_handler(source):
from html5lib import HTMLParser
from html5lib.treebuilders import getTreeBuilder
parser = HTMLParser(tree=getTreeBuilder('dom'))
doc = parser.parse(source)
for el in doc.getElementsByTagName('code'):
if el.hasAttribute('lang'):
lang = el.getAttribute('lang').strip()
el.setAttribute('class', 'highlight[%s]' % lang)
el.removeAttribute('lang')
data = el.firstChild.data
el.firstChild.data = data.strip()
return doc.toxml()
class ArticleAdmin(admin.ModelAdmin):
#exclude = ['cached_content', ]
list_display = ['title', 'published', 'created', 'updated']
def save_model(self, request, obj, form, change):
obj.cached_content = content_handler(obj.content)
obj.save()
admin.site.register(Article, ArticleAdmin)
<code lang=“bash”>Стало:
[] && echo “good”
patch -p1 < filename.txt
</code>
<user id=“1” />
<article id=“243”>название статьи</article>
<?xml version=“1.0” ?>Что меня вполне бы устроило, если бы не появившиеся лишние тэги типа xml, body, etc. Как сохранить все без них?
<html><head/><body><code class="highlight">[] && echo "good"
patch -p1 < filename.txt
</code>
<user id=“1”>
<article id=“243”>название статьи</article></user></body></html>
Офлайн
Мне начинает казаться, что для решения моей задачи лучше использовать bbcode, а не собственные тэги.
Офлайн