Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

django SHOP - Simple Variations

This app's purpose is to provide a way to quickly create product variations for most simple cases.

It considers variations as a {label: value} entry in the cart modifiers, so it is perfect for things like differently priced colors, or build-your-own computers for example.


This requires django SHOP to work (

  • Add the app to your INSTALLED_APPS in your
  • Add shop_simplevariations.cart_modifier.ProductOptionsModifier and shop_simplevariations.cart_modifier.TextOptionsModifier to your SHOP_CART_MODIFIERS setting.
  • Add (r'^shop/cart/', include(simplevariations_urls)), to your just before (r'^shop/', include(shop_urls)),

Your should look like this:

from django.conf.urls.defaults import *
from django.contrib import admin

from shop import urls as shop_urls
from shop_simplevariations import urls as simplevariations_urls


urlpatterns = patterns('',
    (r'^admin/', include(,
    (r'^shop/cart/', include(simplevariations_urls)),
    (r'^shop/', include(shop_urls)),


  • Create an Option group in the admin view
  • Bind it to a product
  • Add options and the corresponding price to the group.
  • When a CartItemOption object is linked to a CartItem, the option's value will be added to the CartItem's price and a corresponding extra field will be added to the Cart/Order.
  • Override django-shop's product_detail.html template and add selection elements so that your users can select variations.

The product_detail.html template

The simple product_detail.html that ships with the shop doesn't take variations into consideration.

Therefore you need to override the template. django-shop-simplevariations ships with two templatetags that help creating drop down lists so that a customer can actually chose variation.

First make sure to load the simplevariation templatetags:

{% load simplevariation_tags %}
<h1>Product detail:</h1>

Next create the drop down lists of OptionsGroups and Options:

<form method="post" action="{% url cart %}">{% csrf_token %}
{% with option_groups=object|get_option_groups %}
  {% if option_groups %}
      {% for option_group in option_groups %}
        <label for="add_item_option_group_{{ }}">{{ }}</label>
        {% with option_group|get_options as options %}
          <select name="add_item_option_group_{{ }}">
            {% for option in options %}
              <option value="{{ }}">{{ }}</option>
            {% endfor %}
        {% endwith %}
      {% endfor %}
  {% endif %}
{% endwith %}
{% with text_options=object.text_options.all %}
  {% if text_options %}
      <h2>Text options:</h2>
      {% for text_option in text_options %}
        <label for="add_item_text_option_{{ }}">{{ }}</label>
        <input type="text" name="add_item_text_option_{{ }}" value=""/>
      {% endfor %}
  {% endif %}
{% endwith %}
<input type="hidden" name="add_item_id" value="{{}}">
<input type="hidden" name="add_item_quantity" value="1">
<input type="submit" value="Add to cart">


Feel free to fork this project on github, send pull requests... development discussion happends on the django SHOP mailing list (


A Django SHOP application to handle simple product variations like different colors, sizes, as well as custom text




No packages published