django request in template

2019-01-15 12:48发布

问题:

I've enabled the django request processor

TEMPLATE_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.request",
)

Still i don't have to request variable available in templates. I've to manually pass it. Using django 1.0.2 Everywhere on web it seems it's only about enabled request processor..

Also i am using RequestContext as :

 return render_to_response(
    'profile.html',
    {
        'persons':Person.objects.all(),
        'person':Person.objects.get(id=id),
         'request':request,
    },
    context_instance=RequestContext(request)
)

no luck

ohh darn the new name for that is TEMPLATE_CONTEXT_PROCESSORS

回答1:

settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
  # ...
  'django.core.context_processors.request',
  # ...
)


回答2:

TEMPLATE_CONTEXT_PROCESSORS instead of TEMPLATE_PROCESSORS



回答3:

Be advised that as of Django 1.8, this has changed to a "TEMPLATES" setting, and in the default configuration, the request processor is NOT included.

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [
        # insert your TEMPLATE_DIRS here
    ],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
            # list if you haven't customized them:
            'django.contrib.auth.context_processors.auth',
            'django.template.context_processors.debug',
            'django.template.context_processors.i18n',
            'django.template.context_processors.media',
            'django.template.context_processors.static',
            'django.template.context_processors.tz',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},]

Just add the request processor back in to fix the issue:

'django.core.context_processors.request',

For more info, see the Django Upgrading Docs.



回答4:

Are you sure you don't have the request variable available to the template? What happens when you remove the line

'request':request,

that's different from when that line is present. If your template loads the same either way, the problem is with your template.



回答5:

MIDDLEWARE_CLASSES=( ... 'yourfolder.yourfile.yourclass', ... yourclass:

class AddRequestToTemplate: process_templaet_response(self, request, response): response.context_data['request']=request