THIS IS A WORK IN PROGRE…

Currently, the model API is subject to smaller changes, and the plugin
API seems pretty stable.

South is used so no database changes will cause data loss. In order to
customize the wiki, best idea is to override templates and create your
own template tags. Do not make your own hard copy of this repository in
order to fiddle with internal parts of the wiki – this strategy will
lead you to lose out on future updates with highly improved features
and plugins. Possibly security updates as well!

The release cycle has already begun, so you can administer django-wiki
through Pypi and pip.

All views are class-based, however don’t take it as an encouragement to
extend them, unless you are prepared to modify both templates and view
classes every time there is an update.

Contributing

The best way to contribute is to use our Github issue list to look
at current wishes. The list is found here:

Generally speaking, we need more unit tests, and new
features will not be accepted without tests. To add more stuff the
the project without tests wouldn’t be fair to the project or
your hard work. We use coverage metrics to see that each new
contribution does not significantly impact test coverage.

The easiest way to add features is to write a plugin. Please create an
issue to discuss whether your plugin idea is a core plugin
(wiki.plugins.*) or external plugin. If there are additions needed
to the plugin API, we can discuss that as well!

To run django-wiki’s tests, run make test or python setup.py test
after installing the requirements.

If you want to test for more environments, install “tox”
(pip install tox) and then just run tox to run the test
suite on multiple environments.

To run specific tests, call runtests.py with the arguments that you
would pass to the normal “manage.py test” command.

Manifesto

Django needs a mature wiki system appealing to all kinds of needs, both
big and small:

Be pluggable and light-weight. Don’t integrate optional features
in the core.

Be open. Make an extension API that allows the ecology of the
wiki to grow in a structured way. Wikipedia consists of over 1100
extension projects
written for MediaWiki. We should learn from this.

Be smart.This
is
the map of tables in MediaWiki - we’ll understand the choices of
other wiki projects and make our own. After-all, this is a Django
project.

Be simple. The source code should almost explain itself.

Be structured. Markdown is a simple syntax for readability.
Features should be implemented either through easy coding patterns in
the content field, but rather stored in a structured way (in the
database) and managed through a friendly interface. This gives
control back to the website developer, and makes knowledge more
usable. Just ask: Why has Wikipedia never changed? Answer: Because
it’s knowledge is stored in a complicated way, thus it becomes very
static.

Docs

If you wish to add something, please ask in the google group or raise an
issue if you’re in doubt about whether something might change.

Background

Django-wiki is a rewrite of
django-simplewiki, a
project from 2009 that aimed to be a base system for a wiki. It proposed
that the user should customize the wiki by overwriting templates, but
soon learned that the only customization that really took place was that
people forked the entire project. We don’t want that for django-wiki, we
want it to be modular and extendable.

As of now, Django has existed for too long without a proper wiki
application. The dream of django-wiki is to become a contestant
alongside Mediawiki, so that Django developers can stick to the Django
platform even when facing tough challenges such as implementing a wiki.

Q&A

Why is the module named just “wiki”? Because “pip install wiki”
returns “No distributions at all found for wiki”! :)

Why not use django-reversion? It’s a great project, but if the
wiki has to grow ambitious, someone will have to optimize its
behavior, and using a third-party application for something as
crucial as the revision system is a no-go in this regard.

Development

The folder testproject/ contains a pre-configured django project and
an sqlite database. Login for django admin is admin:admin. This
project should always be maintained, but please do not commit changes to
the SQLite database as we only care about its contents in case data
models are changed.

Acknowledgements

The people at edX & MIT for finding
and supporting the project both financially and with ideas.

django-cms for venturing
where no django app has gone before in terms of well-planned features
and high standards. It’s a very big inspiration.

django-mptt, a
wonderful utility for inexpensively using tree structures in Django
with a relational database backend.