DZone
Web Dev Zone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
  • Refcardz
  • Trend Reports
  • Webinars
  • Zones
  • |
    • Agile
    • AI
    • Big Data
    • Cloud
    • Database
    • DevOps
    • Integration
    • IoT
    • Java
    • Microservices
    • Open Source
    • Performance
    • Security
    • Web Dev
DZone > Web Dev Zone > How To Use a Python Variable in an External Javascript (Django)

How To Use a Python Variable in an External Javascript (Django)

What if instead of using an HTML template to pass the Django context variable, we inject the variable directly into the external Javascript code.

Fellah A user avatar by
Fellah A
·
Apr. 21, 22 · Web Dev Zone · Tutorial
Like (4)
Save
Tweet
2.81K Views

Join the DZone community and get the full member experience.

Join For Free

One way to use a Python variable in an external Javascript is to declare the JS variable in the HTML template through the context object, then pass this variable to the external script code :

HTML
 
<script type="text/javascript"> 
  js_var_from_dj = "{{ django_var }}";
</script>
<script src="{% static "js/js_file.js" %}" type="text/javascript"></script>

js_file.js :

JavaScript
 
function functionA(){ 
  //using the variable declared outside this js file
  inner_js_var = js_var_from_dj; 
}

What if instead of using an HTML template to pass the Django context variable, we inject the variable directly into the external Javascript code? 

This is actually possible, the trick here is to wrap the original JS file in a View, and use that view to render the JS file as a Django template.

Our js_file become :

JavaScript
 
function functionA(){
  //using the Django context variable
  inner_js_var = {{django_var}};
}

And the Django views.py :

Python
 
def js_wrapper(request):
    django_var = "a message to js"
    context_for_js = {'django_var ': django_var}
    return render(request, 'path_to_template_folder/js_file.js', context_for_js ,"application/javascript")

We add the view to the URLs list :

Python
 
urlpatterns = [
          path('js_wrapper.js', js_wrapper, name = "js_wrapper.js"), 
         ]

And finally, the external JS file would be declared like this:

HTML
 
<script src="{% static "js_wrapper.js" %}" type="text/javascript"></script>

Exploiting Javascript code as a Django template will potentially elevate client-side code capabilities.

A perfect use case is service worker where you want to set up a set of pages to be pre-cached dynamically, so to avoid hard-coded HTML links to those pages. You can define the list of pages, server-side, and send it to the service worker in a form of a list.

Let's say you want to preload web pages with their specifications for a given user, you can then define the view where you retrieve the product list :

Python
 
def sw_workbox(request):
    product_list = Product.objects.filter(user=request.user)
    context = {'product_list': product_list}
    return render(request, 'sw_workbox.js', context,"application/javascript")

And then pass the pages links to precacheAndRoute()

JavaScript
 
workbox.precaching.precacheAndRoute([
  {% for product in product_list%}    
{url: '{% url 'your_app_name:productModel_change' product.id %}'},
{% endfor %}
});
JavaScript Django (web framework) Python (language)

Published at DZone with permission of Fellah A. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Regression Testing: Significance, Challenges, Best Practices and Tools
  • Automation Testing vs. Manual Testing: What's the Difference?
  • 8 Must-Have Project Reports You Can Use Today
  • How to Build a Simple CLI With Oclif

Comments

Web Dev Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • MVB Program
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends:

DZone.com is powered by 

AnswerHub logo