Skip to main content

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 :)

Project details

Download files

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

Source Distribution

rango-0.0.2a.tar.gz (8.8 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page