Skip to main content

Django currencies with historical exchange rates

Project description

Django currencies with historical exchange rates

This is a fairly minimal Django app that renders amounts of currencies, stores historical exchange rates in the database, and performs currency conversion.

When working with any historical multi-currency data, one often needs to be able to perform exchange rate calculations with historical rates. This allows the conversion to be accurately reproduced in the future.

Exchange Rates are stored in a simple database table, with 1 row per rate per date. Conversions can be done directly, or across a base currency using 2 rates.

Formatting is defined by iso4217. Exchange Rate data can be sourced from:


  1. Install django-historical-currencies in your Python environment.
  2. Add historical_currencies to INSTALLED_APPS in your
  3. Import yesterday's exchange rates to get started: import_ecb_exchangerates --daily.
  4. Configure a periodic task (e.g. cron, systemd timer, celery beat) to import daily exchange rates.


  • MAX_EXCHANGE_RATE_AGE: How many days old can an exchange rate be treated as current?

Optional settings, only required for import:

  • OPEN_EXCHANGE_RATES_APP_ID: OpenExchangeRates App ID.


In code, amounts can be converted using the method.

In templates, this module represents financial amounts as tuple of (Decimal, str(currency-code)). The recommended approach is to add properties to your Django models to return this tuple for amounts.

In a template the amount can be displayed or converted:

{% load currency_format %}

Assuming my_amount = (Decimal(10), 'USD')
{{ my_amount|currency }}
-> 10.00 USD

Exchange at the latest rate:
{{ my_amount|exchange:"EUR" }}
-> 9.06 EUR

Currency Selectors:

There are two template tags to help render currency selectors. A high-level one that renders HTML:

{% load currency_choices %}

  {% currency_choices_options selected="USD" %}

And a low-level one that returns a list of currencies:

{% load currency_choices %}

  {% currency_choices_list as currency_choices %}
  {% for code, name in currency_choices %}
    <option value="{{ code }}">{{ name }}</option>
  {% endfor %}


This Django app is available under the terms of the ISC license, see LICENSE.

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

django_historical_currencies-0.0.3.tar.gz (12.0 kB view hashes)

Uploaded Source

Built Distribution

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page