5

最近、プロジェクトをDjango 1.3から1.4にアップグレードしましたが、コンテキストプロセッサが壊れているようです。

myapp/myapp/processors.py

def currentPath(request):
    return {'current_path': request.get_full_path()}

myapp/myapp/settings.py

from django.conf import global_settings

global_settings.TEMPLATE_CONTEXT_PROCESSORS += (
    'myapp.processors.currentPath',
    'django.core.context_processors.request',
)

どのテンプレートでも、{{ current_path }}が期待されます-そして、アップグレードするまで、現在のパスを返します。現在、まったく処理されていません。私は絶対にここで立ち往生しています。

4

4 に答える 4

5

Django 1.8プロセッサを追加すると機能しTEMPLATE_CONTEXT_PROCESSORSません 。

Deprecated since version 1.8:
Set the 'context_processors' option in the OPTIONS of a DjangoTemplates backend instead.

あなたはこのようにそれをしなければなりません:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            # insert your TEMPLATE_DIRS here
        ],
        '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',
            ],
            'loaders': [
                # insert your TEMPLATE_LOADERS here
            ]
        },
    },
]
于 2015-06-11T17:33:37.177 に答える
4

キックのためだけに、その設定を通常の方法で指定することを検討しますか?

- global_settings.TEMPLATE_CONTEXT_PROCESSORS += (
+ TEMPLATE_CONTEXT_PROCESSORS = (                                                 
+     'django.contrib.auth.context_processors.auth',                                   
+     'django.core.context_processors.debug',                                       
+     'django.core.context_processors.i18n',                                        
+     'django.core.context_processors.media',                                       
+     'django.core.context_processors.static',                                      
+     'django.contrib.messages.context_processors.messages',
     'myapp.processors.currentPath',
     'django.core.context_processors.request',
 )

global_settingsこれにより、問題の原因としての(便利に見える!)参照がなくなる可能性があります。

第二に、あなたが実行する場合

manage.py shell

します

from myapp.processors import currentPath

仕事?あなたのプロジェクト構造は少し風変わりなようです(settings.py以前と同じディレクトリにコンテキストプロセッサを見たことがありません。私context.pyはと同じディレクトリにmodels.pyありますが、通常はと同じディレクトリではないはずsettings.pyです)。

(OPの要求に応じてコメントから回答に変換)

于 2012-08-19T18:38:28.917 に答える
2

dictを返す必要があります:

def currentPath(request):
    return {'current_path': request.get_full_path()}
于 2012-08-19T13:05:03.260 に答える
1

RequestContext処理するコンテキストプロセッサのを含める必要があります。

ショートカットを使用しrenderて、自動的に含めることができます。

from django.shortcuts import render

def my_view(request):
   context = {}
   return render(request, 'mytemplate.html', context)

クラスベースのビューを使用している場合は、RequestContextが自動的に含まれます。

于 2012-08-19T17:57:03.053 に答える