Skip to main content

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

Project description


Simple django templatetag for calling an urlconf view endpoint.


  • 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


Install with pip

    $ python3 -m pip install django-rest-caller

Add caller.apps.CallerConfig to INSTALLED_APPS




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' %}


    {% 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 %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.body }}</p>
    {% endfor %}
  • feeding to json tag
    {% load caller_tags %}

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


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.



    value = {'hello': 'world'}


    {{ 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");



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


  • fix VERSION import error


  • extract generic code from templatetag


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


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


  • 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


  • 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