Skip to content
Mobile Data Collection made easy.
JavaScript HTML Python CSS Other
Branch: master
Clone or download
Latest commit 578fc2c Jul 30, 2015


Type Name Latest commit message Commit time
Failed to load latest commit information.
api Revert "Tests involving celery may need the Celery test runner" Aug 8, 2014
docs/install Added README changes Aug 13, 2014
extras Undo file mode change Aug 15, 2014
formhub This might be what was breaking things Aug 15, 2014
js_tests Modified check for supported langauges to look through all questions Feb 7, 2013
main Making sure this bit of code is actually necessary... if it is, then … Aug 15, 2014
odk_logger Making sure this bit of code is actually necessary... if it is, then … Aug 15, 2014
odk_viewer Missed some spots Aug 8, 2014
restservice Merge pull request #1201 from DBell-Feins/master Jul 13, 2013
sms_support Fixes various problems with SMS and Telerivet: Sep 10, 2013
static Fixed bug which causes the same QR code and URL to be displayed for a… Apr 15, 2015
stats use IntegerField for bigger integer valuess Oct 1, 2012
templates ajax-ifying the geo-count; js now updates it, avoiding an expensive c… Dec 3, 2013
utils Bring into line with Apr 28 Aug 13, 2014
.gitattributes OS specific lineendings Feb 21, 2013
.gitignore Bring into line with Apr 29 Aug 13, 2014
.gitmodules boostrap has moved from @twitter/boostrap to @twbs/bootstrap Aug 5, 2013
.travis.yml Update .travis.yml Jul 30, 2015
LICENSE updated LICENSE: formatted for readability Jan 29, 2013
README.rst Added README changes Aug 13, 2014
changelog.txt new line Sep 7, 2012 test dicts rather than dict keys only Oct 3, 2013 Fixed Aug 13, 2014 updated translations Feb 5, 2013 Getting the hang of branching Nov 22, 2013
requirements-dev.pip Put django_nose back Aug 12, 2014
requirements-mysql.pip requirements for other databases Dec 19, 2011
requirements-s3.pip added requirements file for using s3 Feb 1, 2012
requirements-ses.pip added requirements file for using amazon ses for email Mar 13, 2012
requirements.pip adding pandas explicitly to requirements Aug 19, 2014 Added check for notes while building question list plus its js test - f… Sep 24, 2012



Getting Started


If you would like to contribute code please read Contributing Code to Formhub.

Code Structure

Formhub is written in Python, using the Django Web Framework.

In Django terms, an "app" is a bundle of Django code, including models and views, that lives together in a single Python package and represents a full Django application.

Formhub consists of three Django apps:

  • odk_logger - This app serves XForms to ODK Collect and receives submissions from ODK Collect. This is a stand alone application.
  • odk_viewer - This app provides a csv and xls export of the data stored in odk_logger. This app uses a data dictionary as produced by pyxform. It also provides a map and single survey view.
  • main - This app is the glue that brings odk_logger and odk_viewer together.

Internationalization and Localization

Formhub can be presented in specific languages and formats, customized for specific audiences.

These examples were derived from Django's Internationalization and Localization Documentation and there is also a good explanation in The Django Book's Chapter on Internationalization.

To generate a locale from scratch, e.g. Spanish:

$ makemessages -l es -e py,html,email,txt ;
$ for app in {main,odk_viewer} ; do cd ${app} && makemessages -d djangojs -l es && cd - ; done

To update PO files

$ makemessages -a ;
$ for app in {main,odk_viewer} ; do cd ${app} && makemessages -d djangojs -a && cd - ; done

To compile MO files and update live translations

$ compilemessages ;
$ for app in {main,odk_viewer} ; do cd ${app} && compilemessages && cd - ; done
You can’t perform that action at this time.