django-cities-light – Simple django-cities alternative¶
This add-on provides models and commands to import country, region/state, and city data in your database.
The data is pulled from GeoNames and contains cities, regions/states and countries.
Spatial query support is not required by this application.
This application is very simple and is useful if you want to make a simple address book for example. If you intend to build a fully featured spatial database, you should use django-cities.
- Python 2.7 or 3.3,
- Django >= 1.7
- MySQL or PostgreSQL or SQLite.
Yes, for some reason, code that used to work on MySQL (not without pain xD) does not work anymore. So we’re now using django.db.transaction.atomic which comes from Django 1.6 just to support MySQL quacks.
pip install django-cities-light
Or the development version:
pip install -e email@example.com:yourlabs/django-cities-light.git#egg=cities_light
Add cities_light to your INSTALLED_APPS.
Configure filters to exclude data you don’t want, ie.:
CITIES_LIGHT_TRANSLATION_LANGUAGES = ['fr', 'en'] CITIES_LIGHT_INCLUDE_COUNTRIES = ['FR'] CITIES_LIGHT_INCLUDE_CITY_TYPES = ['PPL', 'PPLA', 'PPLA2', 'PPLA3', 'PPLA4', 'PPLC', 'PPLF', 'PPLG', 'PPLL', 'PPLR', 'PPLS', 'STLMT',]
Now, run migrations, it will only create tables for models that are not disabled:
Finally, populate your database with command:
This command is well documented, consult the help with:
./manage.py help cities_light
To build the docs use the following steps:
- mkvirtualenv dcl-doc
- pip install -e ./
- pip install -r docs/requirements.txt
- cd docs
- make html
You could subscribe to the mailing list ask questions or just be informed of package updates.
- Mailing list graciously hosted by Google
- Git graciously hosted by GitHub,
- Documentation graciously hosted by RTFD,
- Package graciously hosted by PyPi,
- Continuous integration graciously hosted by Travis-ci
- **Online paid support** provided via HackHands,
The recommended RDBMS is PostgreSQL, it’s faster, safer, saner, more robust and simpler than MySQL.
You can see on travis that build jobs with MySQL take twice as long as build jobs on PostgreSQL and SQLite.
MySQL errors with special characters, how to fix it ?¶
cities_light command is continuously tested on travis-ci on all supported
databases: if it works there then it should work for you.
If you’re new to development in general, you might not be familiar with the concept of encodings and collations. Unless you have a good reason, you must have utf-8 database tables. See MySQL documentation for details.
We’re pointing to MySQL documentations because PostgreSQL users probably know what UTF-8 is and won’t have any problem with that.
Some data fail to import, how to skip them ?¶
GeoNames is not perfect and there might be some edge cases from time to time.
We want the
cities_light management command to work for everybody so you
should open an issue in GitHub if you
get a crash from that command.
However, we don’t want you to be blocked, so keep in mind that you can use
cities_light.country_items_pre_import, to skip or fix items before
they get inserted in the database by the normal process.