57👍
The context processor you have written should work. The problem is in your view.
Are you positive that your view is being rendered with RequestContext
?
For example:
def test_view(request):
return render_to_response('template.html')
The view above will not use the context processors listed in TEMPLATE_CONTEXT_PROCESSORS
. Make sure you are supplying a RequestContext
like so:
def test_view(request):
return render_to_response('template.html', context_instance=RequestContext(request))
32👍
According to the django docs you can use render
as a shortcut instead of render_to_response with the context_instance argument:
Alternatively, use the
render()
shortcut which is the same as a call to render_to_response() with a context_instance argument that forces the use of a RequestContext.
- [Django]-Django character set with MySQL weirdness
- [Django]-What does 'many = True' do in Django Rest FrameWork?
- [Django]-Django-Forms with json fields
22👍
Let’s say you have a file structure like this:
YourDjangoProject
├───project
│ ├───__init__.py
│ ├───asgi.py
│ ├───settings.py
│ ├───urls.py
│ └───wsgi.py
├───.env
├───manage.py
└───db.sqlite3
1) Anywhere, create a context_processors.py file
I’ll create one in the project folder (with settings.py):
YourDjangoProject
└───project
├───...
└───context_processors.py
2) Create a function in context_processors.py that accepts a HttpRequest object as an argument and returns a dictionary
A context processor is just a function that accepts an HttpRequest object as an argument and returns a dictionary.
Like this:
# project/context_processors.py
def site_email(request):
return {'site_email': 'example@gmail.com'}
3) Add this to your context_processors
setting in settings.py
(at the bottom for security reasons)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'config' / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'project.context_processors.site_email', # <- New context processor here
],
},
},
]
Now you’ll be able to access the ‘site_email’ template variable on every single django template across your whole site.
Happy coding!
- [Django]-Django – How to use decorator in class-based view methods?
- [Django]-Django Rest Framework File Upload
- [Django]-Speeding up Django Testing
10👍
Since Django 1.8 you register your custom context processors like this:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
'templates'
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'www.context_processors.instance',
],
},
},
]
assuming your context processor is in app www
in context_processors.py
- [Django]-Django rest framework serializing many to many field
- [Django]-Reload django object from database
- [Django]-Direct assignment to the forward side of a many-to-many set is prohibited. Use emails_for_help.set() instead
2👍
If you’re using Django’s render_to_response()
shortcut to populate a template with the contents of a dictionary, your template will be passed a Context instance by default (not a RequestContext
). To use a RequestContext
in your template rendering, use the render()
shortcut which is the same as a call to render_to_response()
with a context_instance
argument that forces the use of a RequestContext
.
- [Django]-Django character set with MySQL weirdness
- [Django]-Include intermediary (through model) in responses in Django Rest Framework
- [Django]-How to filter objects for count annotation in Django?