I found a few references to bits and pieces of this in various places, but this snippet ties all three bits of information together in a single string, and accounts for calling the path to the git repo from anywhere (which tends to work “magically” on localhost but breaks on servers).
If you don’t use git tags, season to taste.
@register.simple_tag def git_ver(): ''' Retrieve and return the latest git commit hash ID and tag as a dict. ''' git_dir = os.path.dirname(settings.BASE_DIR) try: # Date and hash ID head = subprocess.Popen( "git -C {dir} log -1 --pretty=format:\"%h on %cd\" --date=short".format(dir=git_dir), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) version = head.stdout.readline().strip().decode('utf-8') # Latest tag head = subprocess.Popen( "git -C {dir} describe --tags $(git -C {dir} rev-list --tags --max-count=1)".format(dir=git_dir), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) latest_tag = head.stdout.readline().strip().decode('utf-8') git_string = "{v}, {t}".format(v=version, t=latest_tag) except: git_string = u'unknown' return git_string
Then, in your template, you can simply:
{% if user.is_superuser %}{% git_ver %}{% endif %}