commit 423b27b0b3808b572f27418fb9d7620e87585d55 Author: bradybodily Date: Wed Mar 14 07:31:46 2018 -0600 first commit mostly done diff --git a/cs2610hw5/Blog/__init__.py b/cs2610hw5/Blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cs2610hw5/Blog/__pycache__/__init__.cpython-36.pyc b/cs2610hw5/Blog/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..9047c4f Binary files /dev/null and b/cs2610hw5/Blog/__pycache__/__init__.cpython-36.pyc differ diff --git a/cs2610hw5/Blog/__pycache__/admin.cpython-36.pyc b/cs2610hw5/Blog/__pycache__/admin.cpython-36.pyc new file mode 100644 index 0000000..49add80 Binary files /dev/null and b/cs2610hw5/Blog/__pycache__/admin.cpython-36.pyc differ diff --git a/cs2610hw5/Blog/__pycache__/apps.cpython-36.pyc b/cs2610hw5/Blog/__pycache__/apps.cpython-36.pyc new file mode 100644 index 0000000..f58c4b7 Binary files /dev/null and b/cs2610hw5/Blog/__pycache__/apps.cpython-36.pyc differ diff --git a/cs2610hw5/Blog/__pycache__/models.cpython-36.pyc b/cs2610hw5/Blog/__pycache__/models.cpython-36.pyc new file mode 100644 index 0000000..f2b9c2f Binary files /dev/null and b/cs2610hw5/Blog/__pycache__/models.cpython-36.pyc differ diff --git a/cs2610hw5/Blog/__pycache__/urls.cpython-36.pyc b/cs2610hw5/Blog/__pycache__/urls.cpython-36.pyc new file mode 100644 index 0000000..9b84f9f Binary files /dev/null and b/cs2610hw5/Blog/__pycache__/urls.cpython-36.pyc differ diff --git a/cs2610hw5/Blog/__pycache__/views.cpython-36.pyc b/cs2610hw5/Blog/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000..cdaab6e Binary files /dev/null and b/cs2610hw5/Blog/__pycache__/views.cpython-36.pyc differ diff --git a/cs2610hw5/Blog/admin.py b/cs2610hw5/Blog/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/cs2610hw5/Blog/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/cs2610hw5/Blog/apps.py b/cs2610hw5/Blog/apps.py new file mode 100644 index 0000000..a0834dc --- /dev/null +++ b/cs2610hw5/Blog/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + name = 'Blog' diff --git a/cs2610hw5/Blog/migrations/__init__.py b/cs2610hw5/Blog/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cs2610hw5/Blog/migrations/__pycache__/__init__.cpython-36.pyc b/cs2610hw5/Blog/migrations/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..dd92920 Binary files /dev/null and b/cs2610hw5/Blog/migrations/__pycache__/__init__.cpython-36.pyc differ diff --git a/cs2610hw5/Blog/models.py b/cs2610hw5/Blog/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/cs2610hw5/Blog/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/cs2610hw5/Blog/static/Blog/Images/Dueling.jpg b/cs2610hw5/Blog/static/Blog/Images/Dueling.jpg new file mode 100644 index 0000000..db49369 Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/Dueling.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/Images/Ginny.jpg b/cs2610hw5/Blog/static/Blog/Images/Ginny.jpg new file mode 100644 index 0000000..56a86c3 Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/Ginny.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/Images/Hedwig.jpg b/cs2610hw5/Blog/static/Blog/Images/Hedwig.jpg new file mode 100644 index 0000000..9b4442f Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/Hedwig.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/Images/Voldemort.jpg b/cs2610hw5/Blog/static/Blog/Images/Voldemort.jpg new file mode 100644 index 0000000..58d2ec8 Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/Voldemort.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/Images/hd-harry-potter-free-wallpapers-free-download.jpg b/cs2610hw5/Blog/static/Blog/Images/hd-harry-potter-free-wallpapers-free-download.jpg new file mode 100644 index 0000000..41a6057 Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/hd-harry-potter-free-wallpapers-free-download.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/Images/headerphoto.jpg b/cs2610hw5/Blog/static/Blog/Images/headerphoto.jpg new file mode 100644 index 0000000..6f83461 Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/headerphoto.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/Images/images.jpg b/cs2610hw5/Blog/static/Blog/Images/images.jpg new file mode 100644 index 0000000..ae45649 Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/images.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/Images/python.jpg b/cs2610hw5/Blog/static/Blog/Images/python.jpg new file mode 100644 index 0000000..324246d Binary files /dev/null and b/cs2610hw5/Blog/static/Blog/Images/python.jpg differ diff --git a/cs2610hw5/Blog/static/Blog/style.css b/cs2610hw5/Blog/static/Blog/style.css new file mode 100644 index 0000000..c9e9116 --- /dev/null +++ b/cs2610hw5/Blog/static/Blog/style.css @@ -0,0 +1,111 @@ +.header{ + background: url("Images/headerphoto.jpg") no-repeat; + width: 100%; + height: 156px; + background-size: 100%; + text-align: center; +} + +div nav { + display: flex; + flex-direction: row; + justify-content: space-evenly; +} + +.pageHeader { + font-family: 'Arial', "Arial Black", sans-serif ; + letter-spacing: 1px; + text-align: center; + font-size: x-large; + +} + +.blogAsideH2 { + align-self: flex-end; + font-family: Impact, Charcoal, sans-serif; + letter-spacing: 1px; + font-size: x-large; + text-emphasis-color: blue; +} + +.mainBody { + display: flex; + flex-wrap: wrap; +} + +body { + background-color: lightgray; +} + +.mainBody .techTips p { + flex-direction: column; + order: 1; +} + +.mainBody .techTips img { + order: 2; +} + +.blogA { + flex: 2; + flex-wrap: wrap; + order: 1; + font-family: 'helvetica neue', helvetica, sans-serif; + letter-spacing: 1px; + padding: 3px 10px; + margin: 10px; + cursor: pointer; +} + +.blogPosts { + border-radius: 10px; + border: 2px solid; + margin-bottom: 5px; + background-color: darkgray; +} + +aside { + flex: 1; + order: 2; +} +aside h1 { + text-decoration: underline; +} +aside img { + max-width:100%; + max-height:100%; + +} +.bioDiv { + display:flex; + flex-direction: row; +} +.bioPhoto img { + flex: 0 0 60%; +} +.BIOFAVS { + flex: 0 0 20%; +} + +image { + max-width:100%; + max-height:100%; +} + + + + +.blogHeader { + font-family: 'Arial', "Arial Black", sans-serif ; + letter-spacing: 1px; + text-align: center; + font-size: large; +} + +footer { + font-family: 'Arial', "Arial Black", sans-serif ; + letter-spacing: 1px; + text-align: center; + font-size: x-small; +} + diff --git a/cs2610hw5/Blog/templates/Blog/bio.html b/cs2610hw5/Blog/templates/Blog/bio.html new file mode 100644 index 0000000..75af07a --- /dev/null +++ b/cs2610hw5/Blog/templates/Blog/bio.html @@ -0,0 +1,58 @@ + + + + {% load static %} + + + Welcome + + +
+

Crucio Assignment

+
+
+ +
+ +
+
+ + + + +
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. +

+

+ Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod in, nibh. Quisque volutpat condimentum velit. +

+

+ Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam nec ante. Sed lacinia, urna non tincidunt mattis, tortor neque adipiscing diam, a cursus ipsum ante quis turpis. Nulla facilisi. Ut fringilla. Suspendisse potenti. Nunc feugiat mi a tellus consequat imperdiet. Vestibulum sapien. Proin quam. Etiam ultrices. Suspendisse in justo eu magna luctus suscipit. Sed lectus. Integer euismod lacus luctus magna. +

+

+ Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum. Morbi in ipsum sit amet pede facilisis laoreet. Donec lacus nunc, viverra nec, blandit vel, egestas et, augue. Vestibulum tincidunt malesuada tellus. Ut ultrices ultrices enim. Curabitur sit amet mauris. Morbi in dui quis est pulvinar ullamcorper. Nulla facilisi. +

+

+ Integer lacinia sollicitudin massa. Cras metus. Sed aliquet risus a tortor. Integer id quam. Morbi mi. Quisque nisl felis, venenatis tristique, dignissim in, ultrices sit amet, augue. Proin sodales libero eget ante. Nulla quam. Aenean laoreet. Vestibulum nisi lectus, commodo ac, facilisis ac, ultricies eu, pede. Ut orci risus, accumsan porttitor, cursus quis, aliquet eget, justo. +

+
+
+ + + diff --git a/cs2610hw5/Blog/templates/Blog/index.html b/cs2610hw5/Blog/templates/Blog/index.html new file mode 100644 index 0000000..3abab04 --- /dev/null +++ b/cs2610hw5/Blog/templates/Blog/index.html @@ -0,0 +1,58 @@ + + + + {% load static %} + + + Welcome + + +
+

Crucio Assignment

+
+
+ +
+ + +
+ + +
+
+

Lorem Ipsum Dolor

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec venenatis ullamcorper dui fringilla lacinia. Aenean nec felis mauris. Curabitur volutpat diam risus, vel placerat diam aliquam pretium. Suspendisse condimentum leo mauris, vel pulvinar ex efficitur quis. Duis convallis purus tellus, non fermentum quam ultricies sit amet. Quisque convallis, nunc eget hendrerit pharetra, mauris leo venenatis eros, nec pulvinar ipsum lectus eget nisl. In eu posuere tortor, eu dignissim ipsum. In id feugiat sem. Etiam feugiat maximus pretium. Quisque sed nisi sed lacus faucibus tristique. Ut eu ultrices felis. In dui ante, fringilla at augue id, porta finibus est. Vestibulum consectetur vel lacus nec blandit. Vivamus non lacus eros. Nunc commodo commodo ullamcorper. Vestibulum sed erat in justo ultrices fermentum in feugiat orci. + Cras at maximus enim. Etiam eu felis vel nisi hendrerit hendrerit. Mauris fermentum, urna et accumsan tincidunt, purus tellus fermentum libero, id laoreet est magna sed felis. Nam fermentum interdum nunc vel tristique. Integer accumsan ipsum quis est convallis dapibus. Curabitur varius bibendum diam quis eleifend. Vestibulum quis semper erat. Duis vel maximus tortor. Sed vehicula ullamcorper libero, quis rhoncus erat condimentum sit amet. Etiam quispurus quam. +

+
+
+

Vestibulum Ante Ipsum

+

+ Etiam ac leo nec risus mattis finibus non in dolor. Vivamus aliquam scelerisque risus, a convallis diam mattis id. Mauris sit amet erat ipsum. Vestibulum auctor, ex id vehicula accumsan, magna eros volutpat neque, id iaculis enimdolor eu dui. In hac habitasse platea dictumst. Cras rutrum enim at tellus blandit euismod. Praesent cursus liberodiam, in tempor lectus bibendum quis. Vestibulum interdum convallis tortor, ullamcorper ullamcorper augue feugiatvel. Sed sollicitudin nulla est, eget consequat quam molestie in. Nunc augue neque, rhoncus vitae ullamcorper tristique, bibendum nec dolor. Mauris faucibus aliquam magna eget commodo. +

+
+
+

In Varius Leo Vel Velit

+

+ Maecenas suscipit tempus neque non dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In hachabitasse platea dictumst. Maecenas vehicula consectetur dignissim. Suspendisse egestas maximus turpis quiseuismod. Morbi pulvinar metus justo, quis aliquam leo pellentesque sed. Morbi sagittis laoreet orci, in pharetra tortor faucibus id. +

+
+
+
+ + + + + diff --git a/cs2610hw5/Blog/templates/Blog/techTips.html b/cs2610hw5/Blog/templates/Blog/techTips.html new file mode 100644 index 0000000..0a69ee6 --- /dev/null +++ b/cs2610hw5/Blog/templates/Blog/techTips.html @@ -0,0 +1,66 @@ + + + + + {% load static %} + + + GIT Cheat Sheet! + + +
+

GIT Cheat Sheet!

+
+
+ +
+
+
+

GIT Commands

+

Getting started with git

+
    +
  1. Create a Repo +
      +
    • + Initialize Repo - git init +
    • + Stage files to Repo - git add . +
    • +
    +
  2. +
+

GIT Command Descriptions

+ +

What do they do?

+
    +
  1. Descriptions +
      +
    • +

      Initialize Repo - This creates the .git direcories allowing for version control

      +
    • +
    +
      +
    • +

      Add files to Repo - This stages all of your files in the directory, + so that they can be commited to the .git.

      +
    • +
    +
  2. +
+

For a full cheat sheet use the Github cheat sheet.

+
+ +
+ + + + diff --git a/cs2610hw5/Blog/tests.py b/cs2610hw5/Blog/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/cs2610hw5/Blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/cs2610hw5/Blog/urls.py b/cs2610hw5/Blog/urls.py new file mode 100644 index 0000000..f8f0694 --- /dev/null +++ b/cs2610hw5/Blog/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path('', views.index, name='index'), + path('bio/', views.bio, name='bio'), + path('techTips/', views.techTips, name='techTips') +] diff --git a/cs2610hw5/Blog/views.py b/cs2610hw5/Blog/views.py new file mode 100644 index 0000000..55322e6 --- /dev/null +++ b/cs2610hw5/Blog/views.py @@ -0,0 +1,12 @@ +from django.shortcuts import render + +# Create your views here. + +def index(request): + return render(request, 'Blog/index.html', {}) + +def techTips(request): + return render(request, 'Blog/techTips.html', {}) + +def bio(request): + return render(request, 'Blog/bio.html', {}) diff --git a/cs2610hw5/cs2610hw5/__init__.py b/cs2610hw5/cs2610hw5/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cs2610hw5/cs2610hw5/__pycache__/__init__.cpython-36.pyc b/cs2610hw5/cs2610hw5/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..cd63a89 Binary files /dev/null and b/cs2610hw5/cs2610hw5/__pycache__/__init__.cpython-36.pyc differ diff --git a/cs2610hw5/cs2610hw5/__pycache__/settings.cpython-36.pyc b/cs2610hw5/cs2610hw5/__pycache__/settings.cpython-36.pyc new file mode 100644 index 0000000..12677bb Binary files /dev/null and b/cs2610hw5/cs2610hw5/__pycache__/settings.cpython-36.pyc differ diff --git a/cs2610hw5/cs2610hw5/__pycache__/urls.cpython-36.pyc b/cs2610hw5/cs2610hw5/__pycache__/urls.cpython-36.pyc new file mode 100644 index 0000000..2230815 Binary files /dev/null and b/cs2610hw5/cs2610hw5/__pycache__/urls.cpython-36.pyc differ diff --git a/cs2610hw5/cs2610hw5/__pycache__/wsgi.cpython-36.pyc b/cs2610hw5/cs2610hw5/__pycache__/wsgi.cpython-36.pyc new file mode 100644 index 0000000..a93ec12 Binary files /dev/null and b/cs2610hw5/cs2610hw5/__pycache__/wsgi.cpython-36.pyc differ diff --git a/cs2610hw5/cs2610hw5/settings.py b/cs2610hw5/cs2610hw5/settings.py new file mode 100644 index 0000000..e237c99 --- /dev/null +++ b/cs2610hw5/cs2610hw5/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for cs2610hw5 project. + +Generated by 'django-admin startproject' using Django 2.0.2. + +For more information on this file, see +https://docs.djangoproject.com/en/2.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.0/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '9l#&_q$*b=js@hum#_(k^ot#=)=gnstg9!2=x2kn7o@xbc6e__' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'Blog.apps.BlogConfig', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +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', +] + +ROOT_URLCONF = 'cs2610hw5.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', + ], + }, + }, +] + +WSGI_APPLICATION = 'cs2610hw5.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/2.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/2.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.0/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/cs2610hw5/cs2610hw5/urls.py b/cs2610hw5/cs2610hw5/urls.py new file mode 100644 index 0000000..644b4fb --- /dev/null +++ b/cs2610hw5/cs2610hw5/urls.py @@ -0,0 +1,23 @@ +"""cs2610hw5 URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('Blog/',include('Blog.urls')), + path('admin/', admin.site.urls), + +] diff --git a/cs2610hw5/cs2610hw5/wsgi.py b/cs2610hw5/cs2610hw5/wsgi.py new file mode 100644 index 0000000..f42ecc8 --- /dev/null +++ b/cs2610hw5/cs2610hw5/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for cs2610hw5 project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cs2610hw5.settings") + +application = get_wsgi_application() diff --git a/cs2610hw5/db.sqlite3 b/cs2610hw5/db.sqlite3 new file mode 100644 index 0000000..c83c343 Binary files /dev/null and b/cs2610hw5/db.sqlite3 differ diff --git a/cs2610hw5/manage.py b/cs2610hw5/manage.py new file mode 100755 index 0000000..8407ef2 --- /dev/null +++ b/cs2610hw5/manage.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cs2610hw5.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv)