Skip to main content

A few tools for helping with case-insensitvity in Django URLs.

Project description

https://badge.fury.io/py/django-icase.svg https://travis-ci.org/bennylope/django-icase.svg?branch=master https://coveralls.io/repos/bennylope/django-icase/badge.svg?branch=master

A few tools for helping with case-insensitvity in Django URLs.

  • 404 handler that redirects non-matched, non-lowercase URLs. E.g. if /About/ is not matched, the handler will redirect to /about/ before returning a 404
  • Middleware that enforces lower-cased URLs. E.g. all non-lowercased URLs will be redirected to their lowercased form.

Overview

If you only need to match URL patterns, then it’s simple to add case-insensitivity to your regular expressions.:

urlpatterns = patterns('',
    (r'^(?i)admin/(.*)', admin.site.root),
    (r'^(?i)static/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': settings.STATIC_DOC_ROOT, 'show_indexes': True}),
    (r'^(?i)login/$', 'django.contrib.auth.views.login'),
    (r'^(?i)logout/$', do_logout),
)

From Alex Martelli’s Stack Overflow explanation.

However this doesn’t do anything to match slugs, which are often case-sensitive matched by default - it’s up to the app. If the app uses a straightforward = expression, e.g.:

object = MyModel.objects.get(slug=slug)

Then MySlug won’t match myslug.

There are also instances where you want to enforce URL casing for other reasons (or a client does!).

Installation

Install django-icase:

pip install django-icase

To use the custom 404 handler, simply specify this in your project urls.py configuration.:

handler404 = 'icase.views.icase_404_handler'

To use the lowercasing middleware, add it to your INSTALLED_MIDDLEWARE.:

INSTALLED_MIDDLEWARE = (
    'icase.middleware.LowerCased',
    ...
)

Django & Python support

Actively supported versions of Django are supported by this app, although there is little reason it should not work on others.

Tested against Python 3 and Python 2.7.9.

History

0.1.1 (2015-05-06)

  • Update django-nose reference to support Django 1.7+

0.1.0 (2015-03-25)

  • First release on PyPI.

Project details


Download files

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

Files for django-icase, version 0.1.1
Filename, size File type Python version Upload date Hashes
Filename, size django_icase-0.1.1-py2.py3-none-any.whl (8.4 kB) File type Wheel Python version 2.7 Upload date Hashes View
Filename, size django-icase-0.1.1.tar.gz (5.8 kB) File type Source Python version None Upload date Hashes View

Supported by

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