最近正在学习《 Python Crash Course 》一书,中文名《 Pythonb 编程,从入门到实践》,学到最后第 20 章的第二部分 20.2 节在 Heroku 上部署”学习笔记“内容。在 20.2.12 节末尾输入命令 heroku open 之后,打开
https://murmuring-wave-89054.herokuapp.com/
发现无法显示和本地一样的”学习笔记“内容,而是提示如下( google 到 stackexchange 几个帖子没太看明白,只好来这里求助一下,谢谢!):
TemplateDoesNotExist at /
Learning_logs/base.html
Request Method: GET
Request URL:
https://murmuring-wave-89054.herokuapp.com/
Django Version: 1.11.2
Exception Type: TemplateDoesNotExist
Exception Value:
Learning_logs/base.html
Exception Location: /app/.heroku/python/lib/python3.6/site-packages/django/template/engine.py in find_template, line 148
Python Executable: /app/.heroku/python/bin/python
Python Version: 3.6.1
Python Path:
['/app',
'/app/.heroku/python/bin',
'/app',
'/app/.heroku/python/lib/python36.zip',
'/app/.heroku/python/lib/python3.6',
'/app/.heroku/python/lib/python3.6/lib-dynload',
'/app/.heroku/python/lib/python3.6/site-packages']
Server time: Mon, 26 Jun 2017 06:18:32 +0000
Template-loader postmortem
Django tried loading these templates, in this order:
Using engine django:
django.template.loaders.app_directories.Loader: /app/.heroku/python/lib/python3.6/site-packages/django/contrib/admin/templates/Learning_logs/base.html (Source does not exist)
django.template.loaders.app_directories.Loader: /app/.heroku/python/lib/python3.6/site-packages/django/contrib/auth/templates/Learning_logs/base.html (Source does not exist)
django.template.loaders.app_directories.Loader: /app/.heroku/python/lib/python3.6/site-packages/bootstrap3/templates/Learning_logs/base.html (Source does not exist)
django.template.loaders.app_directories.Loader: /app/learning_logs/templates/Learning_logs/base.html (Source does not exist)
django.template.loaders.app_directories.Loader: /app/users/templates/Learning_logs/base.html (Source does not exist)
Error during template rendering
In template /app/learning_logs/templates/learning_logs/index.html, error at line 1
Learning_logs/base.html
1 {% extends "Learning_logs/base.html" %}
2
3 {% block header %}
4 <div class='jumbotron'>
5 <h1>Track your learning.</h1>
6 </div>
7 {% endblock header %}
8
9 {% block content %}
10 <h2>
11 <a href="{% url 'users:register' %}">Register an account</a> to make
Traceback Switch to copy-and-paste view
/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py in render
return self.template.render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in render
return self._render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in _render
return self.nodelist.render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in render
bit = node.render_annotated(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in render_annotated
return self.render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py in render
compiled_parent = self.get_parent(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py in get_parent
return self.find_template(parent, context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py in find_template
template_name, skip=history, ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/engine.py in find_template
raise TemplateDoesNotExist(name, tried=tried) ...
▶ Local vars
During handling of the above exception (Learning_logs/base.html), another exception occurred:
/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py in inner
response = get_response(request) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response
response = self.process_exception_by_middleware(e, request) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/app/learning_logs/views.py in index
return render(request, 'learning_logs/index.html') ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/shortcuts.py in render
content = loader.render_to_string(template_name, context, request, using=using) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/loader.py in render_to_string
return template.render(context, request) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py in render
reraise(exc, self.backend) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py in reraise
six.reraise(exc.__class__, new, sys.exc_info()[2]) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/utils/six.py in reraise
raise value.with_traceback(tb) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/backends/django.py in render
return self.template.render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in render
return self._render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in _render
return self.nodelist.render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in render
bit = node.render_annotated(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/base.py in render_annotated
return self.render(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py in render
compiled_parent = self.get_parent(context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py in get_parent
return self.find_template(parent, context) ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/loader_tags.py in find_template
template_name, skip=history, ...
▶ Local vars
/app/.heroku/python/lib/python3.6/site-packages/django/template/engine.py in find_template
raise TemplateDoesNotExist(name, tried=tried) ...
▶ Local vars
Request information
USER
AnonymousUser
GET
No GET data
POST
No POST data
FILES
No FILES data
COOKIES
No cookie data
META
Variable Value
HTTP_ACCEPT
'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING
'gzip, deflate, sdch, br'
HTTP_ACCEPT_LANGUAGE
'en,zh-CN;q=0.8,zh;q=0.6,zh-TW;q=0.4,ru;q=0.2,en-US;q=0.2,sq;q=0.2,ja;q=0.2'
HTTP_CONNECTION
'close'
HTTP_CONNECT_TIME
'1'
HTTP_HOST
'
murmuring-wave-89054.herokuapp.com'
HTTP_TOTAL_ROUTE_TIME
'3002'
HTTP_UPGRADE_INSECURE_REQUESTS
'1'
HTTP_USER_AGENT
('Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like '
'Gecko) Chrome/58.0.3029.110 Safari/537.36')
HTTP_VIA
'1.1 vegur'
HTTP_X_FORWARDED_FOR
'223.3.59.232'
HTTP_X_FORWARDED_PORT
'443'
HTTP_X_FORWARDED_PROTO
'https'
HTTP_X_REQUEST_ID
'1b8704ab-e817-417d-b4a7-e90625db829f'
HTTP_X_REQUEST_START
'1498457909054'
PATH_INFO
'/'
QUERY_STRING
''
RAW_URI
'/'
REMOTE_ADDR
'10.179.55.98'
REMOTE_PORT
'14391'
REQUEST_METHOD
'GET'
SCRIPT_NAME
''
SERVER_NAME
'0.0.0.0'
SERVER_PORT
'36649'
SERVER_PROTOCOL
'HTTP/1.1'
SERVER_SOFTWARE
'gunicorn/19.7.1'
gunicorn.socket
<socket.socket fd=11, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('172.17.36.38', 36649), raddr=('10.179.55.98', 14391)>
wsgi.errors
<gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f5278066d30>
wsgi.file_wrapper
''
wsgi.input
<gunicorn.http.body.Body object at 0x7f5278066da0>
wsgi.multiprocess
True
wsgi.multithread
False
wsgi.run_once
False
wsgi.url_scheme
'https'
wsgi.version
(1, 0)
Settings
Using settings module learning_log.settings
Setting Value
ABSOLUTE_URL_OVERRIDES
{}
ADMINS
[]
ALLOWED_HOSTS
['*']
APPEND_SLASH
True
AUTHENTICATION_BACKENDS
['django.contrib.auth.backends.ModelBackend']
AUTH_PASSWORD_VALIDATORS
'********************'
AUTH_USER_MODEL
'auth.User'
BASE_DIR
'/app/learning_log'
BOOTSTRAP3
{'include_jquery': True}
CACHES
{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS
'default'
CACHE_MIDDLEWARE_KEY_PREFIX
'********************'
CACHE_MIDDLEWARE_SECONDS
600
CSRF_COOKIE_AGE
31449600
CSRF_COOKIE_DOMAIN
None
CSRF_COOKIE_HTTPONLY
False
CSRF_COOKIE_NAME
'csrftoken'
CSRF_COOKIE_PATH
'/'
CSRF_COOKIE_SECURE
False
CSRF_FAILURE_VIEW
'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME
'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS
[]
CSRF_USE_SESSIONS
False
DATABASES
{'default': {'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_MAX_AGE': 0,
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'HOST': '
ec2-54-243-252-91.compute-1.amazonaws.com',
'NAME': 'd6lo6t45mtjlja',
'OPTIONS': {},
'PASSWORD': '********************',
'PORT': 5432,
'TEST': {'CHARSET': None,
'COLLATION': None,
'MIRROR': None,
'NAME': None},
'TIME_ZONE': None,
'USER': 'xhstlgdsyjngpf'}}
DATABASE_ROUTERS
[]
DATA_UPLOAD_MAX_MEMORY_SIZE
2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS
1000
DATETIME_FORMAT
'N j, Y, P'
DATETIME_INPUT_FORMATS
['%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M',
'%Y-%m-%d',
'%m/%d/%Y %H:%M:%S',
'%m/%d/%Y %H:%M:%S.%f',
'%m/%d/%Y %H:%M',
'%m/%d/%Y',
'%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f',
'%m/%d/%y %H:%M',
'%m/%d/%y']
DATE_FORMAT
'N j, Y'
DATE_INPUT_FORMATS
['%Y-%m-%d',
'%m/%d/%Y',
'%m/%d/%y',
'%b %d %Y',
'%b %d, %Y',
'%d %b %Y',
'%d %b, %Y',
'%B %d %Y',
'%B %d, %Y',
'%d %B %Y',
'%d %B, %Y']
DEBUG
True
DEBUG_PROPAGATE_EXCEPTIONS
False
DECIMAL_SEPARATOR
'.'
DEFAULT_CHARSET
'utf-8'
DEFAULT_CONTENT_TYPE
'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE
'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL
'webmaster@localhost'
DEFAULT_INDEX_TABLESPACE
''
DEFAULT_TABLESPACE
''
DISALLOWED_USER_AGENTS
[]
EMAIL_BACKEND
'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST
'localhost'
EMAIL_HOST_PASSWORD
'********************'
EMAIL_HOST_USER
''
EMAIL_PORT
25
EMAIL_SSL_CERTFILE
None
EMAIL_SSL_KEYFILE
'********************'
EMAIL_SUBJECT_PREFIX
'[Django] '
EMAIL_TIMEOUT
None
EMAIL_USE_LOCALTIME
False
EMAIL_USE_SSL
False
EMAIL_USE_TLS
False
FILE_CHARSET
'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS
None
FILE_UPLOAD_HANDLERS
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE
2621440
FILE_UPLOAD_PERMISSIONS
None
FILE_UPLOAD_TEMP_DIR
None
FIRST_DAY_OF_WEEK
0
FIXTURE_DIRS
[]
FORCE_SCRIPT_NAME
None
FORMAT_MODULE_PATH
None
FORM_RENDERER
'django.forms.renderers.DjangoTemplates'
IGNORABLE_404_URLS
[]
INSTALLED_APPS
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap3',
'learning_logs',
'users']
INTERNAL_IPS
[]
LANGUAGES
[('af', 'Afrikaans'),
('ar', 'Arabic'),
('ast', 'Asturian'),
('az', 'Azerbaijani'),
('bg', 'Bulgarian'),
('be', 'Belarusian'),
('bn', 'Bengali'),
('br', 'Breton'),
('bs', 'Bosnian'),
('ca', 'Catalan'),
('cs', 'Czech'),
('cy', 'Welsh'),
('da', 'Danish'),
('de', 'German'),
('dsb', 'Lower Sorbian'),
('el', 'Greek'),
('en', 'English'),
('en-au', 'Australian English'),
('en-gb', 'British English'),
('eo', 'Esperanto'),
('es', 'Spanish'),
('es-ar', 'Argentinian Spanish'),
('es-co', 'Colombian Spanish'),
('es-mx', 'Mexican Spanish'),
('es-ni', 'Nicaraguan Spanish'),
('es-ve', 'Venezuelan Spanish'),
('et', 'Estonian'),
('eu', 'Basque'),
('fa', 'Persian'),
('fi', 'Finnish'),
('fr', 'French'),
('fy', 'Frisian'),
('ga', 'Irish'),
('gd', 'Scottish Gaelic'),
('gl', 'Galician'),
('he', 'Hebrew'),
('hi', 'Hindi'),
('hr', 'Croatian'),
('hsb', 'Upper Sorbian'),
('hu', 'Hungarian'),
('ia', 'Interlingua'),
('id', 'Indonesian'),
('io', 'Ido'),
('is', 'Icelandic'),
('it', 'Italian'),
('ja', 'Japanese'),
('ka', 'Georgian'),
('kk', 'Kazakh'),
('km', 'Khmer'),
('kn', 'Kannada'),
('ko', 'Korean'),
('lb', 'Luxembourgish'),
('lt', 'Lithuanian'),
('lv', 'Latvian'),
('mk', 'Macedonian'),
('ml', 'Malayalam'),
('mn', 'Mongolian'),
('mr', 'Marathi'),
('my', 'Burmese'),
('nb', 'Norwegian Bokmål'),
('ne', 'Nepali'),
('nl', 'Dutch'),
('nn', 'Norwegian Nynorsk'),
('os', 'Ossetic'),
('pa', 'Punjabi'),
('pl', 'Polish'),
('pt', 'Portuguese'),
('pt-br', 'Brazilian Portuguese'),
('ro', 'Romanian'),
('ru', 'Russian'),
('sk', 'Slovak'),
('sl', 'Slovenian'),
('sq', 'Albanian'),
('sr', 'Serbian'),
('sr-latn', 'Serbian Latin'),
('sv', 'Swedish'),
('sw', 'Swahili'),
('ta', 'Tamil'),
('te', 'Telugu'),
('th', 'Thai'),
('tr', 'Turkish'),
('tt', 'Tatar'),
('udm', 'Udmurt'),
('uk', 'Ukrainian'),
('ur', 'Urdu'),
('vi', 'Vietnamese'),
('zh-hans', 'Simplified Chinese'),
('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI
['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE
'en-us'
LANGUAGE_COOKIE_AGE
None
LANGUAGE_COOKIE_DOMAIN
None
LANGUAGE_COOKIE_NAME
'django_language'
LANGUAGE_COOKIE_PATH
'/'
LOCALE_PATHS
[]
LOGGING
{}
LOGGING_CONFIG
'logging.config.dictConfig'
LOGIN_REDIRECT_URL
'/accounts/profile/'
LOGIN_URL
'/users/login/'
LOGOUT_REDIRECT_URL
None
MANAGERS
[]
MEDIA_ROOT
''
MEDIA_URL
''
MESSAGE_STORAGE
'django.contrib.messages.storage.fallback.FallbackStorage'
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']
MIDDLEWARE_CLASSES
['django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware']
MIGRATION_MODULES
{}
MONTH_DAY_FORMAT
'F j'
NUMBER_GROUPING
0
PASSWORD_HASHERS
'********************'
PASSWORD_RESET_TIMEOUT_DAYS
'********************'
PREPEND_WWW
False
ROOT_URLCONF
'learning_log.urls'
SECRET_KEY
'********************'
SECURE_BROWSER_XSS_FILTER
False
SECURE_CONTENT_TYPE_NOSNIFF
False
SECURE_HSTS_INCLUDE_SUBDOMAINS
False
SECURE_HSTS_PRELOAD
False
SECURE_HSTS_SECONDS
0
SECURE_PROXY_SSL_HEADER
('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_REDIRECT_EXEMPT
[]
SECURE_SSL_HOST
None
SECURE_SSL_REDIRECT
False
SERVER_EMAIL
'root@localhost'
SESSION_CACHE_ALIAS
'default'
SESSION_COOKIE_AGE
1209600
SESSION_COOKIE_DOMAIN
None
SESSION_COOKIE_HTTPONLY
True
SESSION_COOKIE_NAME
'sessionid'
SESSION_COOKIE_PATH
'/'
SESSION_COOKIE_SECURE
False
SESSION_ENGINE
'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE
False
SESSION_FILE_PATH
None
SESSION_SAVE_EVERY_REQUEST
False
SESSION_SERIALIZER
'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE
'learning_log.settings'
SHORT_DATETIME_FORMAT
'm/d/Y P'
SHORT_DATE_FORMAT
'm/d/Y'
SIGNING_BACKEND
'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS
[]
STATICFILES_DIRS
('/app/learning_log/static',)
STATICFILES_FINDERS
['django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATICFILES_STORAGE
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT
'staticfiles'
STATIC_URL
'/static/'
TEMPLATES
[{'APP_DIRS': True,
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'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']}}]
TEST_NON_SERIALIZED_APPS
[]
TEST_RUNNER
'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR
','
TIME_FORMAT
'P'
TIME_INPUT_FORMATS
['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE
'UTC'
USE_ETAGS
False
USE_I18N
True
USE_L10N
True
USE_THOUSAND_SEPARATOR
False
USE_TZ
True
USE_X_FORWARDED_HOST
False
USE_X_FORWARDED_PORT
False
WSGI_APPLICATION
'learning_log.wsgi.application'
X_FRAME_OPTIONS
'SAMEORIGIN'
YEAR_MONTH_FORMAT
'F Y'
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.