2009-06-21 18 views
1

私はちょうどDjangoを学び始めています。私はこの書籍のサンプルアプリケーションの1つを完成させようとしています。私はDRY URLを作成しようとしています。具体的には、コンテキストプロセッサを動作させることができません。私はそうと、私のコンテキストプロセッサを作成します。Django Context Processor Trouble

from django.conf import settings 
#from mysite.settings import ROOT_URL 

def root_url_processor(request): 
    return {'ROOT_URL': settings.ROOT_URL} 

と私は具体的には、個人用サイト/フォトギャラリー/ context_processors.py、私のアプリでこのファイルを置きます。私のプロジェクトのルートに私のsettings.pyファイルが含まれています

はTypeError:

TEMPLATE_CONTEXT_PROCESSORS = ('mysite.context_processors',) 

私はまた私のsettings.pyで指定したROOT_URLに行くことにしようと、私はこのエラーを受け取ります/画廊で/

「モジュール」オブジェクトは、/

/ギャラリー呼び出すことはできません、この特定のアプリケーションのROOT_URLです。私はperhpasこれは命名の競合を意味する可能性があることを認識しますが、私は1つを見つけることができません。さらに、settings.pyのTEMPLATE_CONTEXT_PROCESSORS定義をコメントアウトすると、実際にアプリケーションがロードされますが、私のサムネイル画像は表示されません(おそらくテンプレートはROOT_URLについてわからないからです)。誰でも問題の可能性について何か考えがありますか?

EDIT:ここでは、使用のある場合には、私のsettings.pyに関するいくつかの情報です:

ROOT_URLCONF = 'mysite.urls' 

ROOT_URL = '/gallery/' 
LOGIN_URL = ROOT_URL + 'login/' 
MEDIA_URL = ROOT_URL + 'media/' 
ADMIN_MEDIA_PREFIX = MEDIA_URL + 'admin/' 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
) 

TEMPLATE_CONTEXT_PROCESSORS = ('mysite.photogallery.context_processors',) 

EDIT2:私は私のURLのファイルに関するいくつかの情報を追加するつもりです。基本的に私はルートurls.py、rootにあるreal_urls.py、およびアプリケーションに存在するurls.pyを持っています。基本的に、root/urls.pyはROOT_URLをreal_urls.pyから隠します。これには私のアプリのurls.pyが含まれています。

ルート/ urls.py:

from django.conf.urls.defaults import * 
#from mysite.settings import ROOT_URL 
from django.conf import settings 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    # Example: 
    (r'^blog/', include('mysite.blog.urls')), 
         url(r'^%s' % settings.ROOT_URL[1:], include('mysite.real_urls')), 
    ) 

ルート/ real_urls.py:

from django.conf.urls.defaults import * 
from django.contrib import admin 

urlpatterns = patterns('', url(r'^admin/(.*)', admin.site.root), 
         url(r'^', include('mysite.photogallery.urls')), 
         ) 

ルート/フォトギャラリー/ urls.py(この1つは、おそらく問題のいずれかの原因ではないことに注意してくださいが、私は誰もがそれを見たい場合にはそれをここに追加している):。

from django.conf.urls.defaults import * 
from mysite.photogallery.models import Item, Photo 

urlpatterns = patterns('django.views.generic', url(r'^$', 'simple.direct_to_template', kwargs={'template': 'index.html', 'extra_context': {'item_list': lambda: Item.objects.all()} 
                           }, 
                name='index'), url(r'^items/$', 'list_detail.object_list', kwargs={'queryset': Item.objects.all(), 'template_name': 'items_list.html', 'allow_empty': True }, 
                     name='item_list'), url(r'^items/(?P<object_id>\d+)/$', 'list_detail.object_detail', kwargs={'queryset': Item.objects.all(), 'template_name': 'items_detail.html' }, name='item_detail'), url(r'^photos/(?P<object_id>\d+)/$', 'list_detail.object_detail', kwargs={'queryset': Photo.objects.all(), 'template_name': 'photos_detail.html' }, name='photo_detail'),) 
+0

あなたが実際にこのように呼んでいるのであれば、パーズエラーを防ぐために 'return'ステートメントの中の普通の髪型を中身に変えてください。 – che

+0

Woops、それはそれをSOに翻訳する際の誤りでした。私は実際に持っているものと一致するようにコードを修正しました。 – AlbertoPL

答えて

4

TEMPLATE_CONTEXT_PROCESSORSは、CAのリストが含まれている必要がありますモジュールではなくオブジェクトです。テンプレートコンテキストを変換する実際の関数をリストします。 Link to docs

+0

ありがとうございました!この本はかなり混乱していました。私はTEMPLATE_CONTEXT_PROCESSORSの最後にroot_url_processorを追加していました。 – AlbertoPL

+2

本にあまり頼りすぎないでください。学習には最適ですが、問題が発生した場合は、オンラインドキュメントを確認してください。あなたがまだ立ち往生している場合は、ソースコードで答えを見つけることさえできます。明らかにSOはまだ素晴らしい選択肢です。 – SingleNegationElimination

+1

@TokenMacGuy:ソースを読む - 素晴らしいアドバイス。 –