Using Django Settings In Templates
Solution 1:
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
defmy_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
defsome_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
defmy_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)
Solution 2:
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 varsclassYourView(DetailView): #assuming DetailView; whatever though# ...defget_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 }}
Solution 3:
If you only need a setting or two for a couple views, Context Processor may be overkill since it will add them to ALL views in your app. But if it's used in a lot of templates, Contest Processor is the way to go.
For the simple one off case just pass whatever setting you need from the view to the template:
from django.conf import settings
from django.shortcuts import render_to_response
defsome_view(request):
val = settings.SAVED_SETTING
return render_to_response("index.html", {
'saved_setting':val
})
And access the setting in your template via:
{{ saved_setting }}
Post a Comment for "Using Django Settings In Templates"