Reputation: 160
static files are not working in production even for the admin page.
I have not added any static files.
I am having issues with my admin page style.
I have followed the below tutorial to create the django application.
https://tutorial.djangogirls.org/en/
below is my settings.py
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 = '##############################'
# SECURITY WARNING: don't run with debug turned on in production! DEBUG = True
ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com']
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', ]
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 = 'new_p.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 = 'new_p.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/' STATIC_ROOT = os.path.join(BASE_DIR, 'static')
I have already run collectstatic in production.
(master)$ python3 manage.py collectstatic
You have requested to collect static files at the destination location as specified in your settings:
/home/ag/ag.pythonanywhere.com/new_p/static
This will overwrite existing files! Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
0 static files copied to '/home/agusm/agusm.pythonanywhere.com/new_p/static', 119 unmodified.
Upvotes: 7
Views: 10987
Reputation: 21
The main problem is in urls.py of the project you have created i also figured it out and the solution that worked for me was : it works as default settings of django does not include the static and media path if DEBUG = False
urls.py :
urlpatterns = [
path('', include('<app_name>.urls')),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG:
urlpatterns += path('admin/', admin.site.urls)
settings.py:
STATIC_URL = 'Assets/'
STATIC_ROOT = BASE_DIR / 'staticfiles_build' / 'Assets'
STATICFILES_DIRS = [
BASE_DIR / "Assets",
]
Assets is the folder name where my static files are present, it can be static in you r case
Upvotes: 2
Reputation: 145
paste these text in the settings.py file
STATIC_URL = '/static/'
STATICFILES_DIRS=[os.path.join(BASE_DIR,"static"), "templates"]
MEDIA_URL="static/media/"
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media/")
then paste {% load static %}
in the html file where you want to use the static files or media
then use <img src="{% static 'media/images/mandeep.jpeg' %}" alt="My image">
for images
and for css link use <link rel="stylesheet" href="{% static '/css/style.css' %}">
feel free to ask any question
Upvotes: -3
Reputation: 2314
I think your settings and the way you run collectstatic
is fine.
If you are hosting on pythonanywhere, which I assume you are based on your ALLOWED_HOSTS
, you need to follow this guide:
Set up a static files mapping
Finally, set up a static files mapping to get our web servers to serve out your static files for you.
Go to the Web tab on the PythonAnywhere dashboard Go to the Static Files section Enter the same URL as STATIC_URL in the url section (typically, /static/) Enter the path from STATIC_ROOT into the path section (the full path, including /home/username/etc)
Then hit Reload and test your static file mapping by going to retrieve a known static file.
Eg, if you have a file at /home/myusername/myproject/static/css/base.css, go visit http://www.your-domain.com/static/css/base.css
This is basically what you would do manually by setting up your webserver (nginx/apache as in pfitzer's answer), but I assume it's doing the same process of setting a directory alias via pythonanywhere's web interface instead.
Upvotes: 6
Reputation: 86
If you use nginx you need this in your config
server{
...
location /static/ {
alias /path/to/static/;
...
}
...
}
For apache like this
<VirtualHost *:80>
...
Alias /static "/path/to/static/"
<Directory "/path/to/static">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Upvotes: 3
Reputation: 1373
When collectstatic is run, the default STATICFILES_FINDERS value django.contrib.staticfiles.finders.FileSystemFinder will collect your static files from any paths that you have in STATICFILES_DIRS.
The other default STATICFILES_FINDERS value django.contrib.staticfiles.finders.AppDirectoriesFinder will look in the /static/ folder of any apps in your INSTALLED_APPS.
All of the static files that are found will be placed in the specified STATIC_ROOT directory.
$ python manage.py collectstatic
This will copy all files from your static folders into the STATIC_ROOT directory.
You can also use
python manage.py findstatic
to see which directories collectstatic will look in.
Upvotes: -2