Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Django settings in templates [duplicate]

I want to be able to put certain configuration information in my settings.py file - things like the site name, site url, etc.

If I do this, how can I then access those settings in templates?

Thanks

like image 380
Roger Avatar asked Aug 07 '10 12:08

Roger


2 Answers

Let's say in your settings.py file you have:

SITE_URL='www.mydomain.tld/somewhere/' SITE_NAME='My site' 

If you need that in just one or two views:

from django.shortcuts import render_to_response from django.conf import settings  def my_view(request, ...):     response_dict = {         'site_name': settings.SITE_NAME,         'site_url': settings.SITE_URL,     }     ...     return render_to_response('my_template_dir/my_template.html', response_dict) 

If you need to access these across a lot of apps and/or views, you can write a context processor to save code:

James has a tutorial on this online.

Some useful information on the when and if of context processors is available on this very site here.

Inside your my_context_processors.py file you would:

from django.conf import settings  def some_context_processor(request):     my_dict = {         'site_url': settings.SITE_URL,         'site_name': settings.SITE_NAME,     }      return my_dict 

Back in your settings.py, activate it by doing:

TEMPLATE_CONTEXT_PROCESSORS = (     ...      # yours     'my_context_processors.some_context_processor', ) 

In your views.py, make a view use it like so:

from django.shortcuts import render_to_response from django.template import RequestContext  def my_view(request, ...):       response_dict = RequestContext(request)     ...     # you can still still add variables that specific only to this view     response_dict['some_var_only_in_this_view'] = 42     ...     return render_to_response('my_template_dir/my_template.html', response_dict) 
like image 63
Geradeausanwalt Avatar answered Oct 13 '22 22:10

Geradeausanwalt


If using a class-based view:

# # in settings.py # YOUR_CUSTOM_SETTING = 'some value'  # # in views.py # from django.conf import settings #for getting settings vars  class YourView(DetailView): #assuming DetailView; whatever though      # ...      def get_context_data(self, **kwargs):          context = super(YourView, self).get_context_data(**kwargs)         context['YOUR_CUSTOM_SETTING'] = settings.YOUR_CUSTOM_SETTING          return context  # # in your_template.html, reference the setting like any other context variable # {{ YOUR_CUSTOM_SETTING }} 
like image 42
Bill Paetzke Avatar answered Oct 13 '22 22:10

Bill Paetzke