Search code examples
djangodjango-templatesdjango-settings

Can I access constants in settings.py from templates in Django?


I have some stuff in settings.py that I'd like to be able to access from a template, but I can't figure out how to do it. I already tried

{{CONSTANT_NAME}}

but that doesn't seem to work. Is this possible?


Solution

  • Django provides access to certain, frequently-used settings constants to the template such as settings.MEDIA_URL and some of the language settings if you use django's built in generic views or pass in a context instance keyword argument in the render_to_response shortcut function. Here's an example of each case:

    from django.shortcuts import render_to_response
    from django.template import RequestContext
    from django.views.generic.simple import direct_to_template
    
    def my_generic_view(request, template='my_template.html'):
        return direct_to_template(request, template)
    
    def more_custom_view(request, template='my_template.html'):
        return render_to_response(template, {}, context_instance=RequestContext(request))
    

    These views will both have several frequently used settings like settings.MEDIA_URL available to the template as {{ MEDIA_URL }}, etc.

    If you're looking for access to other constants in the settings, then simply unpack the constants you want and add them to the context dictionary you're using in your view function, like so:

    from django.conf import settings
    from django.shortcuts import render_to_response
    
    def my_view_function(request, template='my_template.html'):
        context = {'favorite_color': settings.FAVORITE_COLOR}
        return render_to_response(template, context)
    

    Now you can access settings.FAVORITE_COLOR on your template as {{ favorite_color }}.