Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: TemplateDoesNotExist at / home.html in my project

I can not understand why django can't search 'home.html'

my project name is lucifer

here's my tree of projects

│   ├── lucifer
│   │   ├── __init__.py
│   │   ├── settings
│   │   │   ├── __init__.py
│   │   │   ├── development.py
│   │   │   ├── partials
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── database.py
│   │   │   │   └── static.py
│   │   │   └── production.py
│   │   ├── templates
│   │   │   ├── base.html
│   │   │   ├── home.html
│   │   │   └── partials
│   │   │       ├── footer.html
│   │   │       └── header.html
│   │   ├── urls.py
│   │   ├── views
│   │   │   ├── __init__.py
│   │   │   └── home.py

and my home.html

{% extends 'base.html' %}

{% block title %}
Home
{% endblock %}

header.html

<p>it is header</p>

footer.html

<p>it is footer</p>

base.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>루시퍼 |{% block title %}{% endblock %}</title>
</head>
<body>

    {% include 'partials/header.html' %}

    {% block content %}
    {% endblock %}

    {% include 'partials/footer.html' %}

</body>
</html>

home.py

from django.views.generic import TemplateView


class Home(TemplateView):
    template_name = 'home.html'

urls.py

from django.conf.urls import url
from django.contrib import admin

from .views import *

urlpatterns = [
    url(r'^admin/', admin.site.urls),
url(r'$^', Home.as_view(), name='home'),
]

I think it has no problem..

but error is

Django version 1.9.7, using settings 'lucifer.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Internal Server Error: /
Traceback (most recent call last):
  File "/Users/hanminsoo/.pyenv/versions/lucifer/lib/python3.4/site-packages/django/core/handlers/base.py", line 174, in get_response
response = self.process_exception_by_middleware(e, request)
  File "/Users/hanminsoo/.pyenv/versions/lucifer/lib/python3.4/site-packages/django/core/handlers/base.py", line 172, in get_response
response = response.render()
  File "/Users/hanminsoo/.pyenv/versions/lucifer/lib/python3.4/site-packages/django/template/response.py", line 160, in render
self.content = self.rendered_content
  File "/Users/hanminsoo/.pyenv/versions/lucifer/lib/python3.4/site-packages/django/template/response.py", line 135, in rendered_content
template = self._resolve_template(self.template_name)
  File "/Users/hanminsoo/.pyenv/versions/lucifer/lib/python3.4/site-packages/django/template/response.py", line 90, in _resolve_template
new_template = self.resolve_template(template)
  File "/Users/hanminsoo/.pyenv/versions/lucifer/lib/python3.4/site-packages/django/template/response.py", line 80, in resolve_template
return select_template(template, using=self.using)
  File "/Users/hanminsoo/.pyenv/versions/lucifer/lib/python3.4/site-packages/django/template/loader.py", line 74, in select_template
raise TemplateDoesNotExist(', '.join(template_name_list), chain=chain)
django.template.exceptions.TemplateDoesNotExist: home.html
[06/Feb/2017 07:40:34] "GET / HTTP/1.1" 500 81753

please tell me some advise thank you

ADD TEMPLATES in settings.partials.base.py

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',
            ],
        },
    },
]
like image 908
Jade Han Avatar asked Feb 06 '17 07:02

Jade Han


3 Answers

Be sure to put lucifer inside your settings.py's INSTALLED_APPS APPS_DIR=True will tell Django to look inside your installed apps.

like image 189
Mounir Avatar answered Nov 17 '22 20:11

Mounir


This what we do for my currently project...

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        #'DIRS': [],
        'DIRS': [
            os.path.join(BASE_DIR, 'lucifer/templates'),
        ],
        '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',

                # Enable {{ STATIC_URL }} and {{ MEDIA_URL }}
                'django.template.context_processors.media',
                'django.template.context_processors.static',
            ],
        },
    },
]
like image 3
binpy Avatar answered Nov 17 '22 22:11

binpy


Try this :

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        'APP_DIRS': '',
        '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',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
            ],
            'loaders':[
                'django.template.loaders.filesystem.Loader',
            ]

        },

    },
]
like image 1
Vidya Sagar Avatar answered Nov 17 '22 20:11

Vidya Sagar