2017-06-02 114 views
2

我试图用渲染上显示PyCharm编辑HTML,但是当我输入电子邮件地址:127.0.0.1:8000/index/,以下TemplateDoesNotExist例外出现:TemplateDoesNotExist错误(Python的3.6.1,Django的1.11.1,PyCharm)

TemplateDoesNotExist在/指数/ index.html的 请求 方法:GET 请求URL:http://127.0.0.1:8000/index/ Django的版本:1.11.1 异常类型:TemplateDoesNotExist 异常值:index.html的 异常位置:d:\ python3.6.1 \ LIB \站点包\ Django的\模板\ LO ader.py在get_template 25行 Python的可执行文件:d:\ python3.6.1 \ python.exe Python的版本:3.6.1 Python的路径:
[ 'C:\用户\管理员\客人', “d :\ python3.6.1 \ python36.zip', 'D:\ python3.6.1 \ DLLs', 'D:\ python3.6.1 \ lib', 'D:\ python3.6.1', 'D:\ python3.6.1 \ LIB \站点包] 服务器时间:星期五,2017年6月2日3点30分58秒+ 0000`TemplateDoesNotExist在/索引/

settings.py:

ROOT_URLCONF = 'guest.urls' 
TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [], 
    'APP_DIRS': True, 
    'OPTIONS': { 
     'context_processors': [ 
      'django.template.context_processors.debug', 
      'django.template.context_processors.request', 
      'django.contrib.auth.context_processors.auth', 
      'django.contrib.messages.context_processors.messages', 
     ], 
    }, 
}, 
] 

views.py:

from django.shortcuts import render 

# Create your views here. 
def index(request): 
return render(request,"index.html") 

PyCharm的截图:

enter image description here

我曾尝试提供在计算器上的一些方法,但他们没有工作。这个异常是由错误的dirs引起的吗?我该如何处理这种情况?

+0

_caused错误的dirs_ ...你没有任何目录:''DIRS':[]' –

+0

你已经完成了'collectstatics'吗?你在'settings.py中设置了静态路径'文件?你把所有的模板放在静态模板文件夹中吗? –

+2

@ PiyushS.Wanare你的评论的每一部分都是错误的。为什么collectstatic与模板有什么关系?为什么模板会在静态目录中? –

回答

7

看看这个:

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [], 
    'APP_DIRS': True, 
    'OPTIONS': { 
     'context_processors': [ 
      'django.template.context_processors.debug', 
      'django.template.context_processors.request', 
      'django.contrib.auth.context_processors.auth', 
      'django.contrib.messages.context_processors.messages', 
     ], 
    }, 
}, 
] 

具体

'DIRS': [], 

你需要告诉Django去哪里寻找你的模板。如果您的主项目根目录中有模板文件夹。然后,添加

os.path.join(BASE_DIR, 'templates') 

这里假设你的项目有这样的结构:

root 
    app1 
     ... 
    templates/ 
     what we're referencing with os.path.join(BASE_DIR, "templates") 
     .... 
    static/ 
     what we're referencing with STATIC_ROOT = os.path.join(BASE_DIR, "static") 
    ... 

如果置入的模板您的应用程序内。有两件事。

你的项目中的应用需要这种结构的模板文件夹

app name (folder) 
    templates (folder) 
     app name (folder) 
      (template files) e.g. - "base.html" 

你需要加入这行

os.path.join(BASE_DIR, APP NAME, "templates") 

附录:毫无疑问,你会遇到这个问题,好吧...让我们继续并覆盖它。

如果要扩展/包括作为在一个应用程序(未在基座模板文件夹),你将需要引用它们所在的模板:

实施例:我有一个模板中的“MyApp的/模板/ myapp/template.html“,我想包括它。

然后,我会做{% include "myapp/template.html" %}或如果延长{% extend "myapp/template.html" %}。如果他们在基本模板文件夹中,那么你可以直接引用它们作为"template.html"

+0

非常感谢您耐心解释,以及我的模板(文件夹)被设置在我的应用程序'sign'下,我想添加应用程序名称'sign': –

+0

非常感谢您耐心解释,以及我的模板)被设置在我的应用程序'sign'下,我想添加应用程序名'sign':'DIRS':[os.path.join(BASE_DIR,sign,“templates”)],但是发生另一个异常,NameError名称'符号'没有被定义。我很抱歉,我对Python的知之甚少,但我真的很想回过头来看看我现在面临的问题。 –

+0

它不是一个变量,它是一个字符串...使用引号。不要听起来很刺耳,但如果你不知道这一点,你不应该试图使用Django。这是基本的Python,Django是高级的Python。至少通过一些教程,它会为您节省一些麻烦。 – Pythonista

1

我有同样的问题。这主要是由于,如果你没有在“settings.py”文件安装你的应用

只是这样做在你的settings.py文件,你的错误将会消失

INSTALLED_APPS = [ 
    '<app name>.apps.<app name>Config', 
] 

在粘贴的地方你的“应用程序名称”