Skip to main content
Help us improve Python packaging – donate today!

Rango is a spicey API to Django with some extras.

Project Description


Rango is a bit of spice for Django.


I beleive that short and plain imports are better than long
nested ones.

In Django you should write in your ````:

from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404, redirect
from django.contrib.auth.decorators import login_required

In Rango:

from rango.urls import reverse
from rango.views import get_object_or_404, login_required

Actually that is experimental project tending to build cleaner
API for Django.

Core features

### New ``reverse`` method

It works like that:

from rango.urls import reverse
reverse('url_name', pk=8)

Django ``reverse`` works so:

from django.core.urlresolvers import reverse
reverse('url_name', kwargs={'pk': 8})

### Base model class

It has shorcuts for ``all``, ``get``, ``filter`` and ``exclude``
methods and some extra magic:

from rango import models

class MyModel(models.RangoModel):
class MyModel(RangoModel):
title = models.CharField(max_length=100)
is_active = models.BooleanField()

def active(cls, _queryset=None):
return cls.filter(_queryset, is_active=True)

all_objects = MyModel.all()
start_with_a = MyModel.filter(title__startswith="a")
active_objects =

**Note!** Now you can define filter methods in model class
and chain them in queries. Magic!

### Shortcuts ``rango.views``

from rango.views import render_to, ajax_request, render_to_response, \
render, redirect, get_object_or_404, login_required

### Mailing shortcut

If you need to compose E-mail message body from template and
send it you may use a shortcut:

from rango.mail import send_template

send_template(subject='Subject', template='mail.html',

Full method signature:

def send_template(subject=None, template=None, recipient_list=[],
context={}, from_email=None, **kwargs)

### Other shortcuts and stuff

from rango.crypto import random_token
random_token(20) # creates rangom string

# Yes! that's replacement for
# from django.conf import settings
from rango import settings
settings.get_setting('CUSTOM_SETTINGS', default='Some value')

from rango.utils import safe_upload_to
from rango import models
class MyFile(models.Model):
file = models.FileField(upload_to=safe_upload_to('files'))
# files will be uploaded to
# files/<instance id>/<random>_<filename>


It's not ready yet, I'm working on it.

If you're brave, watch in the source :)

Release history Release notifications

This version
History Node


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
rango-0.0.2a.tar.gz (8.8 kB) Copy SHA256 hash SHA256 Source None Jan 21, 2013

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page