2016-01-14 39 views
0

我目前正在嘗試對我的Django網絡應用程序實現分頁。但是,當我嘗試使用library中的模板標記時,Django引發了一個關鍵錯誤。具體而言:爲什麼Django提出「KeyError」?

KeyError 
KeyError: 'request' 

這裏是我的settings.py:

from django.core.urlresolvers import reverse_lazy 
from os.path import dirname, join, exists 
import os 

# Build paths inside the project like this: join(BASE_DIR, "directory") 
BASE_DIR = dirname(dirname(dirname(__file__))) 
STATICFILES_DIRS = [join(BASE_DIR, 'static')] 
MEDIA_ROOT = join(BASE_DIR, 'media') 
MEDIA_URL = "/media/" 

# Use Django templates using the new Django 1.8 TEMPLATES settings 
TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      join(BASE_DIR, 'templates'), 
      # insert more 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', 
      ], 
     }, 
    }, 
] 

# Use 12factor inspired environment variables or from a file 
import environ 
env = environ.Env() 

# Ideally move env file should be outside the git repo 
# i.e. BASE_DIR.parent.parent 
env_file = join(dirname(__file__), 'local.env') 
if exists(env_file): 
    environ.Env.read_env(str(env_file)) 

# Quick-start development settings - unsuitable for production 
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/ 

ALLOWED_HOSTS = [] 

# Application definition 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django_admin_bootstrapped', 
    'django.contrib.admin', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 

    'authtools', 
    'crispy_forms', 
    'easy_thumbnails', 
    'geoposition', 
    'bootstrap_pagination', 

    'profiles', 
    'accounts', 
    'clients', 

) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

ROOT_URLCONF = 'saas.urls' 

WSGI_APPLICATION = 'saas.wsgi.application' 

# Database 
# https://docs.djangoproject.com/en/dev/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 

# Internationalization 
# https://docs.djangoproject.com/en/dev/topics/i18n/ 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 

# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/dev/howto/static-files/ 

STATIC_URL = '/static/' 

ALLOWED_HOSTS = [] 

# Crispy Form Theme - Bootstrap 3 
CRISPY_TEMPLATE_PACK = 'bootstrap3' 

# For Bootstrap 3, change error alert to 'danger' 
from django.contrib import messages 
MESSAGE_TAGS = { 
    messages.ERROR: 'danger' 
} 

# Authentication Settings 
AUTH_USER_MODEL = 'authtools.User' 
LOGIN_REDIRECT_URL = reverse_lazy("profiles:show_self") 
LOGIN_URL = reverse_lazy("accounts:login") 

THUMBNAIL_EXTENSION = 'png'  # Or any extn for your thumbnails 

我試圖運行模板標籤是:

{% block pagination %} 
    {% bootstrap_paginate page_obj range=10 show_prev_next="false" show_first_last="true" %} 
{% endblock %} 

怎麼辦?

+0

您正在使用哪個Django版本? – lapinkoira

+1

是否將'django.template.context_processors.request'添加到'context_processors'幫助中? –

+0

我正在使用Django 1.9 - 和Alex Morozov,你的解決方案工作,thx! – DBE7

回答

4

bootstrap_paginate模板標籤expects您的模板上下文包含request變量。通過將您的context_processors更改爲:

'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', 
    'django.contrib.auth.context_processors.request', # <-- Here we add the request 
],