2017-08-10 12 views
1

djangoでテンプレートを読み込もうとしています。Django TemplateDoesNotExistとBASE_DIRS

from django.template.loader import get_template 
from django.template import Context 
from django.http import HttpResponse, Http404 
import datetime 

def current_datetime(request): 
    now = datetime.datetime.now() 
    t = get_template('current_datetime.html') 
    html = t.render(Context({'current_date':now})) 
    return HttpResponse(html) 
:私はcurrent_date.htmlと呼ばれ、ファイル

"It is now {{current_date}}." 

の内側に入力されたと私は、コードのブロックの下に書いたビュー内

C:\Users\reza\env_mysite\lib\site-packages\django\contrib\admin\templates 

次にテンプレートディレクトリ内に置くテキストファイルを作成しました

と内部urlpatternsは、私は、型付き:

url(r'^time/$', current_datetime) 
入力された中DIRS内部settings.pyファイルで

、:

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [os.path.join(BASE_DIR,'templates')], 
     'APP_DIRS': True, 

と私は

'DIRS': ['C:\Users\reza\env_mysite\lib\site- 
packages\django\contrib\admin\templates'] 

を入力が、両方のシナリオでは、私は以下の詳細

Request Method: GET 
Request URL: http://127.0.0.1:8000/time/ 

Django Version: 1.11.2 
Python Version: 3.6.1 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 

Template loader postmortem 
Django tried loading these templates, in this order: 

Using engine django: 
    * django.template.loaders.filesystem.Loader: C:\Users\reza\templates\current_datetime.html (Source does not exist) 
    * django.template.loaders.app_directories.Loader: C:\Users\reza\env_mysite\lib\site-packages\django\contrib\admin\templates\current_datetime.html (Source does not exist) 
    * django.template.loaders.app_directories.Loader: C:\Users\reza\env_mysite\lib\site-packages\django\contrib\auth\templates\current_datetime.html (Source does not exist) 
でTemplateDoesNotExistエラーを受け取った次回

私のコードが間違っていることを教えてください。

答えて

2

Djangoのディレクトリの中に自分のテンプレートを置くべきではありません。コードは完全に分離している必要があります。

プロジェクト内に独自のtemplatesディレクトリを作成し、そこにテンプレートを配置する必要があります。あなたの最初の試み、os.path.join(BASE_DIR,'templates')がうまくいくでしょう。次のように

+0

いずれかがプロジェクトディレクトリenv_mysiteまたはmysiteですか?私は両方のフォルダを持っています – reza

+0

あなたのコードの残りはどこですか? –

+0

URL、設定、ビューはmysiteにあり、include、lib、スクリプトはenv_mysiteにあります – reza

0

エラーの残りの部分は、次のとおりです。

Traceback: 

File "C:\Users\reza\env_mysite\lib\site-packages\django\core\handlers\exception.py" in inner 
    41.    response = get_response(request) 

File "C:\Users\reza\env_mysite\lib\site-packages\django\core\handlers\base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:\Users\reza\env_mysite\lib\site-packages\django\core\handlers\base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Users\reza\mysite\views.py" in current_datetime 
    11.  t = get_template('current_datetime.html') 

File "C:\Users\reza\env_mysite\lib\site-packages\django\template\loader.py" in get_template 
    25.  raise TemplateDoesNotExist(template_name, chain=chain) 

Exception Type: TemplateDoesNotExist at /time/ 
Exception Value: current_datetime.html 
0

あなたはC:\Users\reza\env_mysite\lib\site-packages\django\contrib\admin\templatesディレクトリにこの新しいテンプレート、current_date.htmlを置いていると述べました。これはDjangoパッケージの一部であり、admin/registration/という2つのディレクトリを含む必要があります。新しいテンプレート内に入れた場合は、admin/フォルダのような内部フォルダのいずれかにすることはできますか?

もしそうなら、それはこのようになりますように、あなたはあなたのビューでget_template()への呼び出しを更新する必要があります:あなたがここでのベストプラクティスに準拠していない

def current_datetime(request): 
    now = datetime.datetime.now() 
    t = get_template('admin/current_datetime.html') # note updated path 
    html = t.render(Context({'current_date':now})) 
    return HttpResponse(html) 

注意、それは本当に別の問題です。いくつかの提案は、この新しいテンプレートを自分のアプリケーションのtemplates/ディレクトリに移動することです(インストールされたパッケージを変更することはお勧めできません)。また、django.shortcuts.renderを使用して、書き込み/管理:

from django.shortcuts import render 

def current_datetime(request): 
    now = datetime.datetime.now() 
    return render(request, 'admin/current_datetime.html', {'current_date':now}) 
+0

私はそれを管理者でも登録者でもないテンプレートの中に入れます。ファイルの中に私も入力しました{{current_date}}です。二重引用符なし – reza

+0

私はテキストファイルのためにメモ帳を使用しました。それはいいですか? – reza

+0

"admin/base.html"のように、テンプレートパスを確実に存在するファイルに設定するとどうなりますか? (notepadeはokであるべきです) – YellowShark

関連する問題