QuickStart

pip install django-bittersweet

Validated get_or_create

from bittersweet.models import validated_get_or_create

try:
    obj, created = validated_get_or_create(MyModel, key=foo, defaults={'foo': 'bar'})
except ValidationError as exc:
    raise RuntimeError('Cannot create MyModel: %s' % exc)

Templating

Filter: |json

{% load bittersweet_json %}

{{ my_variable|json }}

Filter: get_key

{% load bittersweet_context_utils %}

{{ my_dict|get_key:"title" }}

Tag: {% render_inline %}

{% load bittersweet_render_inline %}

{% render_inline %}
    <b>{{ VARIABLE_WHICH_CONTAINS_TEMPLATE_MARKUP }}</b>
{% end_render_inline }

Tag: {% add_facet %}

{% load bittersweet_querystring %}

<a href="?{% add_facet request.GET "item_type" "book" %}">Books</a>
<a href="?{% add_facet request.GET field_name field_value %}">{{ field_value }}</a>

Tag: {% remove_facet %}

{% load bittersweet_querystring %}

<a href="?{% remove_facet request.GET "item_type" "book" %}">Remove: Books</a>
<a href="?{% remove_facet request.GET field_name field_value %}">Remove: {{ field_value }}</a>

Tag: {% qs_alter %}

{% load bittersweet_querystring %}

Query string provided as QueryDict:

{% qs_alter request.GET foo=bar %}
{% qs_alter request.GET foo=bar baaz=quux %}
{% qs_alter request.GET foo=bar baaz=quux delete:corge %}

Remove one facet from a list:

{% qs_alter request.GET foo=bar baaz=quux delete_value:"facets",value %}

Query string provided as string:

{% qs_alter "foo=baaz" foo=bar %}"

Any query string may be stored in a variable in the local template context by making the last argument “as variable_name”:

{% qs_alter request.GET foo=bar baaz=quux delete:corge as new_qs %}