Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I generate a static html file from a django template?

I'm new to Django, and I'm pretty sure I've read or heard about a way to do this, but I can't find it anywhere.

Rather than sending the rendered output from a template to a browser, I want to create an html file that can then be served without the need to go through the rendering process every time. I'm developing on a system that's separate from our main website's server, and I need to make periodic snapshots of my data available to our users without giving them access to the development system.

My intuition says that I should be able to somehow redirect the response to a file, but I'm not seeing it in the docs or in other posts here.

like image 425
Beverly Block Avatar asked Mar 04 '14 03:03

Beverly Block


People also ask

What is static file in Django?

Aside from the HTML generated by the server, web applications generally need to serve additional files — such as images, JavaScript, or CSS — necessary to render the complete web page. In Django, we refer to these files as “static files”.

Where are Django static files stored?

Using the collectstatic command, Django looks for all static files in your apps and collects them wherever you told it to, i.e. the STATIC_ROOT . In our case, we are telling Django that when we run python manage.py collectstatic , gather all static files into a folder called staticfiles in our project root directory.


1 Answers

You can leverage Django's template loader to render your template, including whatever context you pass to it, as a string and then save that out to the filesystem. If you need to save that file on an external system, such as Amazon S3, you can use the Boto library.

Here's an example of how to render a view to a file, using an optional querystring parameter as the trigger...

from django.shortcuts import render from django.template.loader import render_to_string  def my_view(request):     as_file = request.GET.get('as_file')     context = {'some_key': 'some_value'}      if as_file:         content = render_to_string('your-template.html', context)                         with open('path/to/your-template-static.html', 'w') as static_file:             static_file.write(content)      return render('your-template.html', context) 
like image 105
Brandon Avatar answered Oct 11 '22 12:10

Brandon