Skip to main content

Reusable django app to handle /favicon.ico and robots.txt for your site

Project description

A reusable app to add favicon.ico, robots.txt, SEO tricks and 404/500 error pages handling for your site.


Install “django-site-basics” using pip or easy_install:

pip install django-site-basics

Add “site_basics” and optionally “sitemetrics” to your INSTALLED_APPS in

    'sitemetrics', # (optional) for Google Analytics support

Add site_basics URL patterns and handlers (if you want to use them) to

handler404 = 'site_basics.views.page_404'
handler500 = 'site_basics.views.page_500'

urlpatterns = patterns('',
    url(r'^', include('site_basics.urls')),

Replace Django’s LocaleMiddleware with UpdatedLocaleMiddleware in your MIDDLEWARE_CLASSES:

    #'django.middleware.locale.LocaleMiddleware', # disabled in favor of UpdatedLocaleMiddleware



Put favicon.ico into your STATIC_ROOT. and you good to go, /favicon.ico will automatically redirect to /static/favicon.ico if your STATIC_URL = ‘/static/’.

Otherwise you can set a custom path to your favicon using FAVICON_PATH setting. For example:

FAVICON_PATH = STATIC_URL + 'images/favicon.png'


robots.txt will be working out-of-the-box but if you need to customize it put custom robots.txt file into your templates directory. If you need to change template location use ROBOTS_TEMPLATE setting (robots.txt by default). Example:

ROBOTS_TEMPLATE = 'myfolder/robots.txt'


This is a fix of Django i18n_urlpatterns and SEO problem described in Yawd’s article.

It changes LocaleMiddleware i18n redirects from Temporary (302) to Permanent (301) which prevents search engines from indexing and ranking double links for the same page.

To activate it replace Django’s LocaleMiddleware with UpdatedLocaleMiddleware in your MIDDLEWARE_CLASSES:

    #'django.middleware.locale.LocaleMiddleware', # disabled in favor of UpdatedLocaleMiddleware

Error pages

Error pages work out-of-the-box providing you fancy themes from Annanta and Robotik.

In development you can test these views by opening /test_page_404/ and /test_page_500/.

Annanta is default but you can switch to Robotik using setting:

ERROR_PAGE_THEME = 'robotik' # default is 'annanta'

You can also set a color:


Available colors:

  • blue
  • green
  • gray (Robotik only)
  • grey (Annanta only)
  • red (Annanta only)
  • brown (Annanta only)

And if you’re using Django CMS you can show links to your root pages by setting:


More configuration options below…

Google Analytics (sitemetrics)

  1. Add ‘sitemetrics’ to ‘INSTALLED_APPS’ in your settings file (usually ‘’)
  2. Add ‘{% load sitemetrics %}’ tag to the top of a template (usually base template, e.g. ‘base.html’)

Then you have two options that add metrics client code to your page:

  • Use so-called ‘four arguments’ sitemetrics tag notation:

    {% sitemetrics by google for "UA-000000-0" %}

Here: ‘google’ — provider alias; ‘UA-000000-0’ — keycode argument. That’s how you put Google Analytics client code (with ‘UA-000000-0’ keycode) into page.

  • Use so-called ‘no arguments’ sitemetrics tag notation:

    {% sitemetrics %}

That’s how you put all client codes registered and active for the current site.

Client codes are registered with sites through Django Admin site interface. ‘Admin site’ and ‘Sites’ from Django contrib are required for this option to work.

‘./ syncdb’ is required just once for this option to work (it installs sitemetrics table into database).



Sets a template for robots.txt handler (‘robots.txt’ by default). Example:

ROBOTS_TEMPLATE = 'myforlder/myrobotstemplate.txt'


Sets a theme for error pages (‘annanta’ or ‘robotik’, ‘annanta’ by default). Example:

ERROR_PAGE_THEME = 'robotik'


Sets a color for error pages theme (‘blue’ by default). Example:



404 template (‘%s/404.html’ % ERROR_PAGE_THEME by default). Example:

ERROR_404_PAGE_TEMPLATE = 'myforlder/404.html'


500 template (‘%s/500.html’ % ERROR_PAGE_THEME by default). Example:

ERROR_404_PAGE_TEMPLATE = 'myforlder/500.html'


Set it if you want to display your logo on the error pages (None by default). Example:

ERROR_PAGE_LOGO_URL = '%simages/logo.png' % settings.STATIC_URL


Allows you to setup a search form on your error pages (None by default).

Additional settings:

  • ERROR_PAGE_SEARCH_PARAM (‘q’ by default)



Running the Tests

You can run the tests with via:

python test




  • Add more templates
  • Add locales and translations
  • Sitemaps support


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-site-basics, version 0.2.5
Filename, size File type Python version Upload date Hashes
Filename, size django_site_basics-0.2.5-py2.7.egg (752.9 kB) File type Egg Python version 2.7 Upload date Hashes View
Filename, size django-site-basics-0.2.5.tar.gz (630.6 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page