Intuitive text editing for humans using Django.
Project description
Intuitive text editing for humans using Django.
This project is in early development, please test it out and report any bugs!
Installation
Install the package with pip.
$ pip install django-text
Add text to your installed packages.
# settings.py
INSTALLED_APPS = (
# ...
'text',
)
Add text.middleware.TextMiddleware and 'text.middleware.ToolbarMiddleware' to your middleware classes.
# settings.py
MIDDLEWARE_CLASSES = (
# ...
'text.middleware.TextMiddleware',
'text.middleware.ToolbarMiddleware',
)
Make sure these context processors are installed, they come with Django.
# settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
# ...
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.request',
)
Append text.urls to your urlpatterns in urls.py.
# urls.py
from django.conf.urls import patterns, include, url
from text.urls import urlpatterns as django_text_patterns
urlpatterns = patterns('',
url(r'^django_text/', include(django_text_patterns, namespace='django_text')),
)
Run migrate.
$ python manage.py migrate
Usage
The text tag
Add editable tags to your templates.
{% load text %}
<h1>{% text "header" "My Header" %}</h1>
<div class="content">
{% text "text_body" %}
</div>
The text tag takes a default text as the second argument. If no default text is passed, the name of the text node (i.e. the first argument) will be used if there is no corresponding text node in the database.
The blocktext tag
You can also use the blocktext tag that let’s you wrap content to use as the default text.
{% load text %}
<div class="content">
<h1>
{% blocktext "header" %}
Read My Awesome Text
{% endblocktext %}
</h1>
{% blocktext "content" %}
Put your default text here!
{% endblocktext %}
</div>
The blocktext tags works with translation tags inside of it. So if you already have a translated site, you can wrap your content with this tag and only add text nodes for some of the languages that you support.
Specifying content type
Both the text and the blocktext tags support specifying the content type of its default text. The choices are “html”, “markdown” and “text” which is the default.
{% text "html_node" "<h1>Hello World!</h1>" "html" %}
{% blocktext "markdown_node" "markdown" %}
# Hello there,
I can have markdown in my templates!
{% endblocktext %}
If content type is not provided both will default to text.
Content editing
The toolbar allows you to edit texts directly on your pages.
You can also edit texts in the Django Admin.
Missing text nodes will be added to the database automatically when their template tags are rendered.
Settings
AUTOPOPULATE_TEXT
Default: True
Set to false to disable django-text from adding missing text nodes to the database.
TEXT_TOOLBAR_ENABLED
Default: True
Set to false to disable the toolbar interface.
TEXT_TOOLBAR_FORM_PREFIX
Default: 'djtext_form'
This is passed to the toolbar form and can be changed to avoid name conflicts.
TEXT_TOOLBAR_INSTANT_UPDATE
Default: True
Set to false to disable instant updating of the DOM when saving texts in the toolbar.
TEXT_INLINE_WRAPPER
Default: ('<span data-text-name="{0}" class="{1}">', '</span>')
A tuple of two that gets wrapped around texts in the template to enable instant updating.
TEXT_INLINE_WRAPPER_CLASS
Default: 'dj_text_inline_wrapper'
Change this to change the class of the element that gets wrapped around texts.
Contribution
Contribution is very welcome. Use issues to report bugs and propose features. For pull requests to be accepted they need to be well tested.
Running tests
Install test dependencies.
$ pip install -r test-requirements.txt
Run tests.
$ export PYTHONPATH=`pwd`; runtests.py --settings='text.tests.settings'
Run tests with coverage.
$ export PYTHONPATH=`pwd`; coverage run `which runtests.py` --settings='text.tests.settings'
License
Copyright (c) 2015 Anton Agestam. django-text is released under the MIT license. See the LICENSE file for more information and licenses for bundled code.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.