Skip to main content

templatetag to call an urlconf and store its payload into the template context

Project description

django-rest-caller

Simple django templatetag for calling an urlconf view endpoint.

Limitations

  • it works only for GET methods
  • it doesn't handle request without a body
  • it doen't play nice with login required views (it assumes that the caller handles everything it is required to access the endpoint)
  • it assumes that the endpoint returns a json

Installation

Install with pip

    $ python3 -m pip install django-rest-caller

Add caller.apps.CallerConfig to INSTALLED_APPS

    INSTALLED_APPS = [
        ...
        'caller.apps.CallerConfig',
        ...
    ]

Usage

call

In your template load the templatetag

    {% load caller_tags %}

and use the call tag as

    {% call 'urlconf' arg1=42 arg2='X' with param1='1' param2='2' as 'object_name' %}

or

    {% call 'urlconf' 42 'X' with param1='1' param2='2' as 'object_name' %}
  • 'urlconf' arg1=42 arg2='X' this is the usual {% url %} parameters (remember: use args parameter list or kwargs parameters, not both)
  • param1='1' param2='2' these parameters will be converted to GET querystring
  • as 'object_name' store the called object into object_name object. It can be a string or a variable name.

so the called url is equivalent to

    {% url 'urlconf' arg1=42 arg2='X' %}?param1=1&param2=2

The call will inject the result json object into the template context, so you can

  • use as context object
    {% load caller_tags %}

    {% call 'api:blog-list' as 'posts' %}
    {% for post in posts %}
    <div>
    <h2>{{ post.title }}</h2>
    <p>{{ post.body }}</p>
    </div>
    {% endfor %}
  • feeding to json tag
    {% load caller_tags %}

    {% call 'api:blog-list' as 'posts' %}
    {{ posts|json_script:"posts-data" }}
    <script>
        function get_json(node) {
          var el = document.getElementById(node);
          return JSON.parse(el.textContent || el.innerText);
        }
        var posts = get_json("posts-data");
        console.log(posts);
    </script>

json_script

This tag will backport the django >= 2.1 json_script filter, which safely outputs a Python object as JSON, wrapped in a <script> tag, ready for use with JavaScript.

example

with

    value = {'hello': 'world'}

and

    {{ value|json_script:"hello-data" }}

will output

    <script id="hello-data" type="application/json">{"hello": "world"}</script>

and can be retrieved with

    function get_json(name) {
      var el = document.getElementById(name);
      return JSON.parse(el.textContent || el.innerText);
    }
    var data = get_json("hello-data");
    console.log(data);

Changes

dev

  • export utils.call in init, so can do from caller import call

0.2.1

  • fix VERSION import error

0.2.0

  • extract generic code from templatetag

0.1.5

  • proper url unquote arg parameters
  • can use templatefilters in templatetag parameters

0.1.4

  • show raised exception in called view instead of a generic one

0.1.3

  • always require as 'varname'
  • be able to use args or kwargs for urlconf as documented
  • update documentation

0.1.1 - 0.1.2

  • update documentation

0.1.0

  • initial release

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-rest-caller, version 0.2.2
Filename, size File type Python version Upload date Hashes
Filename, size django_rest_caller-0.2.2-py3-none-any.whl (28.0 kB) File type Wheel Python version py3 Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page