17

それは一般的な初心者の問題のように思われるので、私は持っています。

私は最初のdjangoプロジェクトに取り組んでおり、ビューを設定すると「TemplateDoesNotExist」エラーが発生します。私は今これに多くの時間を費やしています-そして私はそれにたくさんのトピックがあることを知っていますが、今まで何も私を助けませんでした。

必要なすべての情報を提供できるといいのですが、上級のdjangoユーザーは、Imが間違っていることを直接確認できます。

開発サーバーを使用しています。およびWindows7およびsqlite3。

これは私が得るエラーです:

TemplateDoesNotExist at /skates/
allsk8s.html
Request Method: GET
Request URL:    http://127.0.0.1:8000/skates/
Django Version: 1.4.3
Exception Type: TemplateDoesNotExist

settings.pyで、TEMPLATE_DIRSを次のように設定しました。

TEMPLATE_DIRS = (
    r'H:/netz2/skateprojekt/templates/',
)

テンプレートローダーは次のようになります。

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

これは私の見解です:

from django.shortcuts import render_to_response
from django.template import RequestContext
from sk8.models import Sk8

def AllSk8s(request):
    skates      = Sk8.objects.all().order_by('name')
    context     = {'skates':skates}
    return render_to_response('allsk8s.html', context, context_instance=RequestContext(request))

allsk8s.htmlにリンクする必要があります-リンクしているように見えますが、ファイルは間違いなく正しいフォルダーにありますが、ファイルが見つかりません。しかしあなたが見ることができるように:

Template-loader postmortem
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
H:\netz2\skateprojekt\templates\allsk8s.html (File does not exist)

これは私のurls.pyの一部です

    urlpatterns = patterns('',
         url(r'^admin/', include(admin.site.urls)),
         (r'^skates/$', 'sk8.views.AllSk8s'),
 )

これがシステムパスです。

H:\netz2\skateproject\templates

テンプレートフォルダには、私が理解している限り、allsk8s.htmlというファイルがあります。これは機能するはずです。誰かが私を助けてくれることを本当に望んでいます。これは私がこのような問題に遭遇したのは2回目であり、問​​題を理解することはできません。

事前に感謝しますダニエル


編集:

これをsettings.pyに追加しようとしました:

import os
DIRNAME = os.path.abspath(os.path.dirname(__file__))

TEMPLATE_DIRSを次のように変更しました。

TEMPLATE_DIRS = (
    os.path.join(DIRNAME, r'H:/netz2/skateprojekt/templates/'),
)

私が読んだのでそれは助けになるでしょう-しかしそれでも同じエラーを返しました-それで私はそれを再び元に戻しました。;(


編集:

また、間違ったURLを入力すると、次のエラーがスローされることを確認しました。

Using the URLconf defined in skateproject.urls, Django tried these URL patterns, in this order:
^admin/
^skates/$

したがって、スケートのURLはそこにあるはずですが、「解決」することはできません。私はそれを取得できません:(


編集:

私は今日何か新しいことを発見しました、テンプレートローダーの事後分析はそれがこれらのディレクトリもチェックすると言います:

Using loader django.template.loaders.app_directories.Loader:
C:\Python27\lib\site-packages\django\contrib\auth\templates\allsk8s.html (File does not exist)
C:\Python27\lib\site-packages\django\contrib\admin\templates\allsk8s.html (File does not exist)

そこで、テンプレートファイルをそこに移動して、新しいエラーを受け取りました。これは、htmlファイルをansiからutf8およびtadaに変換することで修正されました。これは機能しました。残念ながら、このフォルダ内のテンプレートファイルがプロジェクトの一部ではない原因となるようにすることはできません。ファイルを元の場所に戻すと、古いエラーが発生しました:(

4

8 に答える 8

15

この問題の解決策の1つは、settings.pyにアプリを追加する必要があることです。請求書などの名前のアプリケーションがあると仮定します。これに対する解決策は次のとおりです。

INSTALLED_APPS = [
'invoice.apps.InoviceConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
于 2016-04-01T07:33:08.227 に答える
9

神の聖母!解決しました!

理由はわかりませんが、これが「TemplateDoesNotExist」エラーの解決策です(私の場合)。

私のフォルダ構造は次のようなものです。

netz2> skateproject

これまで、skateprojectとsettings.pyにtemplatesフォルダーがあり、このディレクトリをポイントしていました。これは、Firefoxでページを開こうとしたときに、テンプレートが存在しないというエラーをスローしました。

skateprojectは、そこにあるプロジェクトフォルダーであるため、フォルダーsk8を取得しました。これは、現在作業中のアプリであり、実行しようとしているアプリです。解決策は非常に簡単です。

アプリのサブディレクトリにあるテンプレートを移動する必要がありました。このように見えます

netz2>skateproject>sk8>テンプレート

そして今それは動作します!

したがって、同じ問題が発生する場合は、テンプレートフォルダがプロジェクトのルートになく、作業中のアプリのサブディレクトリであることを確認してください。このパスをsettings.pyTemplate_dirsに追加してください。

私の例では次のようになります。

TEMPLATE_DIRS = (
    r'H:/netz2/skateprojekt/sk8/templates/',
)
于 2013-01-04T16:49:46.897 に答える
9

誰かがDjango1.7とPython3以降でこれを試している場合、私はこれを行いました:

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'mysite_dir/templates')]

ここで、myfile_dirはmysiteの下の任意のdirにすることができます。ファイル構造は次のようになります。

manage.py
mysite/  
  mysite/  
  mysite_dir/  
  templates/  
    ____init__.py  
    models.py  
    #...
  another_app/  

この答えは繰り返しのように見えるかもしれませんが、私はいつもより最近の日付から物事を見るのが好きだと知っています...だからこれが役立つことを願っています

于 2014-11-29T02:27:30.750 に答える
3

同様の問題に数時間苦労しましたが、テンプレートを使用してアプリ内の/ templatesサブディレクトリにテンプレートを配置すると、テンプレートを読み込むことができることがわかりました。settings.pyでTEMPLATE_DIRSを設定する必要はなく、ファイルは自動的に検出されます。残念ながら、TemplateDoesNotExist例外はあまり説明的ではなく、場合によっては文字通り間違っています。テンプレートローダーの事後分析で、次のようなものが表示された場合:

Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
/Users/me/mysite/myapp/index.html

また、ファイルパスは、ロードしようとしているテンプレートに対して正しいように見えます。ファイルは存在している可能性がありますが、アクセスできません。アプリの/templatesサブディレクトリに移動してみてください。

于 2013-01-08T03:51:44.213 に答える
3

Djangoのドキュメントに従う場合は、テンプレートの名前空間を推奨しています。テンプレートの下では、テンプレートの前に/ yourapp /があります。ここを参照してください。

したがって、構造は次のようになります。

Project Folder
--Project
--yourapp
  --templates
    --yourapp
      --layout.html

しかし、彼らが明確にしていないのは、それらのテンプレートへのハードコードされた参照(たとえば、レンダリング関数)は、それらにもアプリ名を付加する必要があるということです!Djangoが私たちのために再帰的な検索を行っていると思いましたが、私はそれにあまりにも多くの信用を与えました。正確なリンクを指す必要があります。

例えば

return render(request, "login.html")

に行く

return render(request, "orders/login.html")

これは、 extendsステートメントや、staticを使用してファイルにリンクする場合にも必要になる可能性があります。

于 2019-10-23T16:21:59.167 に答える
0

私にとって{% include 'some.html' %}はこのエラーを投げていました。./次のような 先頭を必ず含めてください。{% include './some.html' %}

于 2020-08-17T16:29:00.833 に答える
0

テンプレートディレクトリのパスをソースルートからプロジェクト設定dirs変数に貼り付けるだけです。このように見えるはずです

    'DIRS': [
        'templates'
    ],
于 2021-10-22T14:56:51.527 に答える
-8

Django設定ファイルでDEBUGをfalseに設定するだけです

于 2016-02-29T17:37:14.573 に答える