Найти - Пользователи
Полная версия: Обработка собственных тэгов
Начало » Django » Обработка собственных тэгов
1
nuklea
Сразу признаюсь, да, я не осилил документацию.

начал с html5lib — http://code.google.com/p/html5lib/wiki/UserDocumentation
потом нашел нечто про lxml — http://codespeak.net/lxml/dev/
наткнулся на это, немного не в тему — http://softwaremaniacs.org/forum/django/2350/

А задача стоит так — у меня есть некий код, к примеру вот:

<code lang=“bash”>
[] && echo “good”
patch -p1 < filename.txt
</code>

<user id=“1” />

<article id=“243”>название статьи</article>
И хотелось бы уметь заменить lang=“bash” на какой-нибудь class="highlight", а так же сделать strip(), а потом django.utils.html.escape() для текста между <code>. Ну и другие преобразования с тэгами. И да, я совершенно не понимаю, куда смотреть и с чего начать. Пожалуйста, тыкните, пускай грубо, но тыкните. Спасибо за внимание!
Александр Кошелев
Этот “код” это xml?
nuklea
Нет, html.
nuklea
Получилось примерно вот что:

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” ?>
<html><head/><body><code class="highlight">[] &amp;&amp; echo &quot;good&quot;
patch -p1 &lt; filename.txt
</code>

<user id=“1”>

<article id=“243”>название статьи</article></user></body></html>
Что меня вполне бы устроило, если бы не появившиеся лишние тэги типа xml, body, etc. Как сохранить все без них?
А еще не совсем понятно, почему я не могу просто получить текст между тэгами и приходится использовать какой-то firstChild, причем есть еще и lastChild, а про них в документации нет ничего толкового.
nuklea
Мне начинает казаться, что для решения моей задачи лучше использовать bbcode, а не собственные тэги.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB