django-markupfield

Custom Django field for easy use of markup in text fields
Download

django-markupfield Ranking & Summary

Advertisement

  • Rating:
  • License:
  • BSD License
  • Price:
  • FREE
  • Publisher Name:
  • James Turk
  • Publisher web site:

django-markupfield Tags


django-markupfield Description

Custom Django field for easy use of markup in text fields django-markupfield is an implementation of a custom MarkupField for Django. A MarkupField is in essence a TextField with an associated markup type. The field also caches its rendered value on the assumption that disk space is cheaper than CPU cycles in a web application.InstallationYou can obtain the latest release of django-markupfield via PyPI or check out the latest sourceTo install a source distribution:python setup.py installIt is also possible to install django-markupfield with pip or easy_install.It is not necessary to add 'markupfield' to your INSTALLED_APPS, it merely needs to be on your PYTHONPATH.SettingsTo best make use of MarkupField you should define the MARKUP_FIELD_TYPES setting, a dictionary of strings to callables that 'render' a markup type:import markdownfrom docutils.core import publish_partsdef render_rest(markup): parts = publish_parts(source=markup, writer_name="html4css1") return partsMARKUP_FIELD_TYPES = { 'markdown': markdown.markdown, 'ReST': render_rest,}If you do not define a MARKUP_FIELD_TYPES then one is provided with the following markup types available:html: allows HTML, potentially unsafeplain: plain text markup, calls urlize and replaces text with linebreaksmarkdown: default markdown renderer (only if python-markdown is installed)restructuredtext: default ReST renderer (only if docutils is installed)textile: default textile renderer (only if textile is installed)UsageUsing MarkupField is relatively easy, it can be used in any model definition:from django.db import modelsfrom markupfield.fields import MarkupFieldclass Article(models.Model): title = models.CharField(max_length=100) slug = models.SlugField(max_length=100) body = MarkupField()Article objects can then be created with any markup type defined in MARKUP_FIELD_TYPES:Article.objects.create(title='some article', slug='some-article', body='*fancy*', body_markup_type='markdown')You will notice that a field named body_markup_type exists that you did not declare, MarkupField actually creates two extra fields here body_markup_type and _body_rendered. These fields are always named according to the name of the declared MarkupField.ArgumentsMarkupField also takes two optional arguments default_markup_type and markup_type. Either of these arguments may be specified but not both.default_markup_type: Set a markup_type that the field will default to if one is not specified. It is still possible to edit the markup type attribute and it will appear by default in ModelForms.markup_type: Set markup type that the field will always use, editable=False is set on the hidden field so it is not shown in ModelForms.Accessing a MarkupField on a modelWhen accessing an attribute of a model that was declared as a MarkupField a special Markup object is returned. The Markup object has three parameters:raw: The unrendered markup.markup_type: The markup type.rendered: The rendered HTML version of raw, this attribute is read-only.This object has a __unicode__ method that calls django.utils.safestring.mark_safe on rendered allowing MarkupField objects to appear in templates as their rendered selfs without any template tag or having to access rendered directly.Assuming the Article model above:>>> a = Article.objects.all()>>> a.body.rawu'*fancy*'>>> a.body.markup_typeu'markdown'>>> a.body.renderedu'< p >< em >fancy< /em >< /p >'>>> print unicode(a.body)< p >< em >fancy< /em >< /p >Assignment to a.body is equivalent to assignment to a.body.raw and assignment to a.body_markup_type is equivalent to assignment to a.body.markup_type. Requirements: · Python · Django


django-markupfield Related Software