1

そのため、環境変数と負荷設定をチェックするdjango設定モジュールをセットアップしようとしています。

これが私の設定モジュールの外観です

/templates
    home.html

/settings
    base.py
    prod.py
    dev.py
    test.py

base.py

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

TEMPLATE_DIRS = [
os.path.join(PROJECT_ROOT, "templates"),
]

urls.py

from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
url(r"^$", direct_to_template, {'template' : 'home.html' }, name="home"),
)

すべての設定を1つのファイルにまとめると、これは問題なく機能しましたが、ファイルを分割したため、次のエラーが発生します。

TemplateDoesNotExist at /

home.html

Template-loader postmortem

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
/Users/Tulsa/Apps/tulsa-applications-co/tulsa/tulsa/settings/templates/home.html (File does not exist)
Using loader django.template.loaders.app_directories.Loader:
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/django/contrib/auth/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/django/contrib/admindocs/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/grappelli/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/django/contrib/admin/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/pagination/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/djangosaml2/templates/home.html (File does not exist)
/Users/Tulsa/Apps/tulsa-applications-co/tulsa/tulsa/apps/profiles/templates/home.html (File does not exist)
/Users/Tulsa/.Apps/tulsa_io/lib/python2.7/site-packages/debug_toolbar/templates/home.html (File does not exist)

Using loader django.template.loaders.eggs.Loader:

私はここで何が欠けていますか?

4

5 に答える 5

8

上記のすべての回答では、TEMPLATE_DIRS または TEMPLATE_LOADERS を構成する必要がありますが、これは必要ではなく、正しくもありません。アプリケーションを INSTALLED_APPS に配置するだけです。

たとえば、アプリケーションが MyMegaApp (settigs.py がある場所) にある場合、つまり、次のようなプロジェクト構造があります。

MyMegaApp
   MyMegaApp
      templates
         index.html
      settings.py 
   manage.py

次に、このようにアプリを追加する必要があります

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'MyMegaApp'
)

その後、index.htmlテンプレートはMyMegaApp/templatesフォルダーにあります。

于 2013-03-05T23:59:50.257 に答える
3

ここでの問題は、設定で、PROJECT_ROOTを実行するディレクトリに評価することmanage.pyです。

あなたはTEMPLATE_DIRS設定のためにこれを行うことができます

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
print PROJECT_ROOT    

../../ここで、に関連して追加しますPROJECT_ROOT。このようなもの:

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../../'))

TEMPLATE_DIRS = [
    os.path.join(PROJECT_ROOT, "templates"),
]
于 2012-09-17T03:13:27.767 に答える
2

次のように変更PROJECT_ROOTします。

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

そして、TEMPLATE_LOADERS変数が正しく設定されていることを確認してください。

説明:

abspathの完全なパスbase.py、つまり、/home/some-path/project-folder/settings/base.py

したがって、最初dirnameに指定されたパス (上記で取得) の dir パス名が表示されます。つまり、/home/some-path/project-folder/settings/

次に、2 番目dirnameは指定されたパス (上記で取得) の dir パス名を示します。つまり、/home/some-path/project-folder/

したがって、このパスを に参加させるとtemplates、すべてが正常に機能し始めます。

詳細については、python docsを参照してください。

于 2012-09-17T05:44:42.957 に答える
0

これを設定に含める

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.
    os.path.join(SITE_ROOT, 'appname/templates'),

)

これをurls.pyに追加します

from django.conf.urls.defaults import *
from  django.views.generic.simple.direct_to_template import direct_to_template
from appname.views import *

によってURLを呼び出す

  urlpatterns = patterns('django.views.generic.simple',
    (r'^foo/$',             'direct_to_template', {'template': 'foo_index.html'}),
    (r'^foo/(?P<id>\d+)/$', 'direct_to_template', {'template': 'foo_detail.html'}),
  )
于 2012-09-17T06:30:38.160 に答える
0

以下のようにテストできますか?

あなたのコードはPROJECT_ROOTを「/some/path/to/settings」として設定すると思います

from os.path import dirname, abspath, normpath, join
PROJECT_ROOT = dirname(dirname(abspath(__file__)))
TEMPLATE_DIRS = (
normpath(join(PROJECT_ROOT, 'templates')),
)
于 2012-09-17T05:40:21.117 に答える