RkBlog

Hardware, programming and astronomy tutorials and reviews.

Integracja NicEdit z Django

Integrujemy funkcjonalności edytora WYSIWYG NicEdit z aplikacją Django

nicedit to fajny edytor Wysiwyg posiadający kilka ciekawych możliwości. Można wykorzystywać go jako wizualny edytor BBCode stosowanego głównie na forach dyskusyjnych. Posiada też moduł przesyłania zdjęć na serwer - domyślnie zdalnie na imageshack, choć można także zintegrować własną aplikację do obsługi przesyłania plików. Niniejszy artykuł zaprezentuje integrację Nicedita z Django.

Instalacja edytora

Przesyłanie grafik na serwer

Edycja BBCode

Kolejną przydatną funkcjonalnością jest obsługa BBCode. Edytor renderuje treść HTML lecz zwaraca ją w postaci BBCode. By uruchomić tą opcję wystarczy dodać bbCode: true w konfiguracji edytora w szablonie. Wysyłając formularz z treścią zobaczymy że treść została wysłana ze znacznikami BBCode. By umożliwić edycję treści z takimi znacznikami musimy je sparsować do postaci XHTML przed przekazaniem do edytora.

Do parsowania BBCode trzeba użyć jakiegoś parsera napisanego w Pythonie, lub samemu napisać prostą funkcję, np w postaci taga szablonów Django:
from re import findall

from django import template
from django.conf import settings

register = template.Library()

def fbc(value):
	# strip HTML at start
	# then:
	value = value.replace("'", ''').replace('"', '"')
	
	tags = findall( r'(?xs)\[url=(.*?)\](.*?)\[/url]''', value)
	for i in tags:
		value = value.replace('[url=%s]%s[/url]' % (i[0], i[1]), '<a href="%s">%s</a>' % (i[0].replace('"', ''), i[1]))
	
	value = value.replace('[b]', '<b>')
	value = value.replace('[/b]', '</b>')
	value = value.replace('[i]', '<i>')
	value = value.replace('[/i]', '</i>')
	value = value.replace('[u]', '<u>')
	value = value.replace('[/u]', '</u>')
	value = value.replace('[quote]', '<blockquote>')
	value = value.replace('[/quote]', '</blockquote>')
	value = value.replace('[url]', '')
	value = value.replace('[/url]', '')
	value = value.replace('
', '<br />')
	
	tags = findall( r'(?xs)\[img\](.*?)\[/img]''', value)
	for i in tags:
		if not len(i) < 3:
			value = value.replace('[img]%s[/img]' % i, '<img src="%s" alt="" />' % i)
	
	return value

register.filter('fbc', fbc)
RkBlog

12 December 2010;

Comment article