'django static file not loading
I have problem that i done every thing as described in tutorial https://docs.djangoproject.com/en/1.5/intro/tutorial06/ and every thing also running fine but css,images are not showing their effects. Being a new one on django, Suggestions required. thanks for any help.
My css file:-
li a {
color: red;
}
body {
background: white url("images/background.gif") no-repeat right bottom;
}
url.py file:-
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import patterns,url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'),
url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Index.html file -
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static '/polls/style.css' %}"/>
{% if latest_poll_list %}
<ul>
{% for poll in latest_poll_list %}
<li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
Settings.py file:-
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/polls/static/'
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
ROOT_URLCONF = 'mysite.urls'
WSGI_APPLICATION = 'mysite.wsgi.application'
TEMPLATE_DIRS = (
'C:/django poll project/mysite/templates',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'polls',
)
On runserver, getting-
[18/Sep/2014 17:40:51] "GET /polls/ HTTP/1.1" 200 311 [18/Sep/2014 18:25:39] "GET /polls/ HTTP/1.1" 200 311
Solution 1:[1]
The URL to the static-Files is "yourDomain/static/"
When you want to access to your "style.css" you should use "/static/style.css" instead of "/polls/style.css"
EDIT:
Change this part of your settings.py
STATICFILES_DIRS = (
'/polls/static/'
)
to
STATICFILES_DIRS = (
'C:/django poll project/mysite/static'
)
better would be:
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, '..', 'static'),
)
Then the folder is called "static" and is on the same level where the "manage.py" is. When you put your style.css in this "static"-folder you can call it with "/static/style.css"
Solution 2:[2]
Updated Answer For Django 2.2 - 2019
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
BASE_DIR is already defined in
settings.py
Also when loading, do {% load static %}
instead of {% load staticfiles %}
Solution 3:[3]
It worked for me :
PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, '..', 'static'),
)
Solution 4:[4]
If problem bad variable {{STATIC_URL}} in template files, in settings.py add:
django.template.context_processors.static
here:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': TEMPLATE_DIRS,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.template.context_processors.static',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Solution 5:[5]
Following the documentation: https://docs.djangoproject.com/en/3.2/howto/static-files/
And restarting the server worked for me
Solution 6:[6]
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'images')
Solution 7:[7]
Currently works on Django Version 3.x
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>Website</title>
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
<body>
<h1>Hello user!</h1>
<p>something you want</p>
</body>
</html>
To work above Implementation Following code must be added in project setting file.
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
Here static is a directory in project root.
Solution 8:[8]
- Remove django.contrib.staticfiles from INSTALLED apps.
- Set STATIC_ROOT to the drive folder with the static files.
- Set STATIC_URL to the browser folder/prefix that will point at the files.
The problem is STATIC_ROOT and STATICFILES_DIRS cannot be the same folder and try to act differently...
STATICFILES_DIRS
exists because different installable apps have different static resources.
through django magic, in development these files are served from each app.
This allows editing assets and re-running the server without worrying about the STATIC_ROOT cache.
also requires collector that assembles static files into STATIC_ROOT.
STATIC_ROOT
- The place the files are served from in production.
- A simple browser path to folder mapping.
- Not recommended for production because usually NGINX or AppEngine handles this.
- Works because you are skipping the collector and telling Django to look here always.
- Will not work if an app has its own assets, you will need to use STATIC_DIRS.
Solution 9:[9]
When you run 'python manage.py runserver' add any post number like 2000 or whatever it will look like 'python manage.py runserver 2000' it will solve the problem
Solution 10:[10]
for Django version 4 2022
if anyone's static file is not working,make sure your static folder is in the right location
shortcut: Keep your static folder in the same directory where your database is located.
-->ProjectName
-->app1
-->app2
-->db.sqlite3
-->static
and make sure you have added this lines in settings.py
STATIC_URL = 'static/'
STATICFILES_DIRS = (
BASE_DIR/'static',
)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow