Skip to main content

A Django app for lazy loading template tags over AJAX

Project description

https://img.shields.io/pypi/v/django-lazy-tags.svg Documentation Status https://travis-ci.org/grantmcconnaughey/django-lazy-tags.svg https://coveralls.io/repos/grantmcconnaughey/django-lazy-tags/badge.svg?branch=master&service=github

A Django app for easily loading template tags via AJAX.

Installation

1. Install via pip

pip install django-lazy-tags

2. Add to installed apps

INSTALLED_APPS = (
    # ...
    'lazy_tags',
)

3. Add the lazy tags urls to your root urlconf.

urlpatterns = patterns('',
    # ...
    url(r'^lazy_tags/', include('lazy_tags.urls')),
)

Usage

First, load the lazy_tags library in your templates.

{% load lazy_tags %}

Then, call the lazy_tag template tag passing your tag name as the first parameter. The format is tag_library.tag_name where tag_library is what you would load at the top of the page (e.g. my_tags) and tag_name is the name of your template tag (e.g. my_template_tag). After the first argument to lazy_tag simply pass the rest of the args and kwargs just as you would pass them to your own tag.

This:

{% load my_tags %}

{% my_template_tag arg1 arg2 kw1='hello' kw2='world' %}

Becomes this:

{% load lazy_tags %}

{% lazy_tag 'my_tags.my_template_tag' arg1 arg2 kw1='hello' kw2='world' %}

After placing your template tags in the template you still need to specify where you would like the AJAX JavaScript to output to the page. That is what the lazy_tags_js tag is for:

{% block js-additional %}
  {% lazy_tags_js%}
{% endblock %}

This will spit out the JavaScript required to run the AJAX. The JavaScript changes depending on your LAZY_TAGS_AJAX_JS setting.

The lazy_tag decorator

django-lazy-tags also includes a decorator that can be used on template tags that use simple_tag. When using the lazy_tag decorator you can use your template tags exactly the same as before and they will use AJAX.

from lazy_tags.decorators import lazy_tag

@register.simple_tag
@lazy_tag
def show_user(pk):
    user = User.objects.get(pk=pk)
    return render_to_string('user/show_user.html', {
        'user': user,
    })

There are a few caveats with this method. First, the decorator currently only works with tags that use simple_tag. Hopefully this will work with inclusion_tag in the future. Secondly, the lazy_tag decorator must come after the simple_tag decorator.

Settings

LAZY_TAGS_AJAX_JS

The library to use to run AJAX. Options are 'javascript', 'jquery', or 'prototype'. Defaults to 'jquery'.

LAZY_TAGS_CACHE_TIMEOUT

The timeout on each lazy tag cache. Defaults to 60 (seconds).

LAZY_TAGS_ERROR_MESSAGE

The error message to display if the AJAX request fails. Defaults to 'An error occurred.'

Customizing the Loading Animation

This is the default HTML on the page before the AJAX request completes:

<div id="{{ tag_id }}" class="lazy-tag">
    <div class="lazy-tag-spinner-container"
         style="width: 100%; text-align: center;">
        <img id="{{ tag_id }}-spinner" class="lazy-tag-spinner"
             style="width: 15px; height: 15px;"
             src="{static_url}img/lazy_tags/spinner.gif" />
    </div>
</div>

To customize the loading animation, override the lazy-tag, lazy-tag-spinner-container, or lazy-tag-spinner classes in your CSS.

Current Limitations

  • Does not work with tags that take context.

  • Template tag arguments must be serializable (str, unicode, int, float, etc.).

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-lazy-tags-0.4.1.tar.gz (204.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_lazy_tags-0.4.1-py2.py3-none-any.whl (28.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django-lazy-tags-0.4.1.tar.gz.

File metadata

File hashes

Hashes for django-lazy-tags-0.4.1.tar.gz
Algorithm Hash digest
SHA256 9cf2e9e8b790117328cd76a33068942a5e7ae2a659b9fd6a5faced2a3aeaac1e
MD5 680f91035613e220c8272b563ad6c402
BLAKE2b-256 9ffb1f4587d1cb037b7dc16dd283a1f9bc1fed21f65612d7f604ac26c1b33cf0

See more details on using hashes here.

File details

Details for the file django_lazy_tags-0.4.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_lazy_tags-0.4.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b22e4588dba6921067656819aa9aa6dd4dbbe388661740d3a5d76214cd855d52
MD5 010489447aaabf91e484c9e2d89c6b25
BLAKE2b-256 d2ed1642328ccf0ff32076be1cdae5d779023d194cc74c6560986e0cc68a9bb7

See more details on using hashes here.

Supported by

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