To calculate the hash for a compress block, get_offline_hexdigest() calls smart_str on each template node, which resulted in the Python repr of the templates node which is not a text node.
This caused problems when using the {% static %} tag inside a compress block, since the {% static %} repr looks something like this:
>>> template.Template('{% load static %}{% static "foo" %}').nodelist
[<django.template.defaulttags.LoadNode at 0x10e747510>, <django.template.base.SimpleNode at 0x10e747490>]
The repr changes on every compilation (since the memory location changes), which caused the checksum to change every time, and thus made the offline mode unusable.
This patch renders the blocks completely, and calculates the checksums on the entire rendered block.