2011-03-04 6 views
2

私のフックされたアプリケーションのdjango cms 'プラグインコンテキストプロセッサを取得しようとしています。私は文書http://docs.django-cms.org/en/2.1.3/extending_cms/custom_plugins.html#plugin-context-processorsに従っていますが、何らかの理由でそれが動作しません。ここで私のサンプルコンテキストプロセッサである:django-cmsのプラグインコンテキストプロセッサ

def test_context_processor(instance, placeholder): 
    print instance 
    return {'testkey':'testvalue'} 

と私のテンプレート:

{% load cms_tags %} 

<!doctype html> 
<head> 
    <title></title> 
    {% plugins_media %} 
</head> 

<body> 

{% placeholder "main" %} 

</body> 
</html> 

Iメインプレースホルダテキストプラグインを追加し、{{とtestkey}}テキストを追加しました。 testvalueの代わりに{{testkey}}としてレンダリングします。コンテキストプロセッサのprint文は正しくログに記録されます。つまり、コンテキストプロセッサが確実に呼び出されます。私はここで何が間違っているのか分かりません。

---編集---

私の設定ファイル:

# -*- coding: utf-8 -*- 
import os 

gettext = lambda s: s 

PROJECT_DIR = os.path.abspath(os.path.dirname(__file__)) 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    # ('Your Name', '[email protected]'), 
) 

MANAGERS = ADMINS 

LANGUAGES = [('en', 'en')] 
DEFAULT_LANGUAGE = 0 

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

DATABASE_ENGINE = 'postgresql_psycopg2'   # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
DATABASE_NAME = '***'  # Or path to database file if using sqlite3. 
DATABASE_USER = '***'    # Not used with sqlite3. 
DATABASE_PASSWORD = '***'   # Not used with sqlite3. 
DATABASE_HOST = ''    # Set to empty string for localhost. Not used with sqlite3. 
DATABASE_PORT = '5432'    # Set to empty string for default. Not used with sqlite3. 

# Local time zone for this installation. Choices can be found here: 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 
# although not all choices may be available on all operating systems. 
# On Unix systems, a value of None will cause Django to use the same 
# timezone as the operating system. 
# If running in a Windows environment this must be set to the same as your 
# system time zone. 
TIME_ZONE = 'America/Chicago' 

# Language code for this installation. All choices can be found here: 
# http://www.i18nguy.com/unicode/language-identifiers.html 
LANGUAGE_CODE = 'en-us' 

SITE_ID = 1 

# If you set this to False, Django will make some optimizations so as not 
# to load the internationalization machinery. 
USE_I18N = True 

# If you set this to False, Django will not format dates, numbers and 
# calendars according to the current locale 
USE_L10N = True 

# Absolute filesystem path to the directory that will hold user-uploaded files. 
# Example: "/home/media/media.lawrence.com/" 
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') 

# URL that handles the media served from MEDIA_ROOT. Make sure to use a 
# trailing slash if there is a path component (optional in other cases). 
# Examples: "http://media.lawrence.com", "http://example.com/media/" 
MEDIA_URL = '/media/' 

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a 
# trailing slash. 
# Examples: "http://foo.com/media/", "/media/". 
ADMIN_MEDIA_PREFIX = '/media/admin/' 

# Make this unique, and don't share it with anybody. 
SECRET_KEY = '0r6%7gip5tmez*[email protected]^8e2^26o#5_f_#b7%cm)u' 

# List of callables that know how to import templates from various sources. 
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'cms.middleware.page.CurrentPageMiddleware', 
    'cms.middleware.user.CurrentUserMiddleware', 
    'cms.middleware.toolbar.ToolbarMiddleware', 
    'cms.middleware.media.PlaceholderMediaMiddleware', 
) 

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.auth', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.request', 
    'django.core.context_processors.media', 
    'cms.context_processors.media', 
) 

CMS_PLUGIN_CONTEXT_PROCESSORS = (
    'helpdocs.cms_context_processors.test_context_processor', 
) 

CMS_TEMPLATES = (
    ('example.html', 'Example Template'), 
) 

ROOT_URLCONF = 'urls' 

TEMPLATE_DIRS = (
    os.path.join(PROJECT_DIR, 'templates'), 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.admin', 
    'cms', 
    'menus', 
    'mptt', 
    'appmedia', 
    'south', 
    'cms.plugins.text', 
    'cms.plugins.picture', 
    'cms.plugins.link', 
    'cms.plugins.file', 
    'cms.plugins.snippet', 
    'cms.plugins.googlemap', 
    'helpdocs', 
) 
+0

はあなたがここにあなたのsettings.pyを貼り付けることができます。

はあなたがこのような何かをするだろう何をしようとして達成するためには? – sush

答えて

3

プラグインのコンテキストプロセッサは、プラグインのテンプレートがレンダリングさいるとコンテキストを処理するために使用されています。彼らはデータベースフィールドの内容を変更しません(あなたの場合、テキストモデルの 'body')。

したがって、テキストプラグインの内容は置き換えられません。あなたがしようとしていることをするには、Plugin Processors(http://docs.django-cms.org/en/2.1.3/extending_cms/custom_plugins.html#plugin-processors)を見てくださいプラグインのレンダリングされた出力

def my_plugin_processor(instance, placeholder, rendered_content, original_context): 
    return rendered_content.replace('{{ testkey }}', 'testvalue') 
関連する問題