问题
I can't get my static files to come up. I've tried various settings and directory configurations and so on, but they just turn up as 404s. I have debug_toolbar installed so know that STATIC_URL is reaching my request context.
Directory structure showing /static (I have also placed the directory inside of the meals app folder, and users, just to try it out.
/mealmate
/mealmate
/meals
/static
/css
/bootstrap.min.css
/templates
/users
Settings.py (a few important settings though I've experimented with a variety of other ones):
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')
STATIC_URL = '/static/'
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
WSGI_APPLICATION = 'mealmate.wsgi.application'
In base.html rendered
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
Any ideas? Thanks
回答1:
This is the working solution for static/media/template access in django for windows,
settings.py
import os.path
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )
回答2:
For me this turned out to be caused by setting debug to false in settings.py. A workaround is to pass the --insecure switch to runserver, but the real solution is to use a proper web server to serve the static files. See the answers to this question for more details.
回答3:
If you are running this on a web server are you copying the static files to a public accessible folder? For example:
# web accessible folder
STATIC_ROOT = '/home/your_name/www/mealmate/static/'
# URL prefix for static files.
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# location of your application, should not be public web accessible
'/home/your_name/website/mealmate/static',
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Then you can use this post Django static Files and copy the static files to the public accessible folder using manage.py
# --link Create a symbolic link to each file instead of copying.
# --noinput Do NOT prompt the user for input of any kind.
#
python manage.py collectstatic -link --noinput
Hope that helps!
回答4:
I simply added the equivalent of
STATICFILES_DIRS = (
'/absolute_path_to_project/mealmate/static',
)
to get this working. Of course, replace absolute_path_to_project with your actual path and, if necessary, add the drive letter.
回答5:
I was also stuck in the 404 problem until I realized that Apache had blocked the requests to the static dir. I used python manage.py collectstatic to copy all the static files to the static dir under my project root, i.e. /var/my/site/static. With
Alias /static /var/my/site/static
<Directory /var/my/site/static>
Require all granted
</Directory>
in /etc/httpd/conf/httpd.conf, it works properly now.
If none of the answers above works, you may consider checking your server config.
回答6:
Make sure mealmate is in your INSTALLED_APPS
回答7:
from comments above - run this
python manage.py findstatic --verbosity 2 css/styles.css
No matching file found for 'css/styles.css'.
Looking in the following locations:
/Users/yourname/Documents/Workspace/test/staticfiles
I simply renamed my static folder to staticfiles and all was well. (I'm on osx + django 1.x)
use insecure mode may not hurt if you're on local dev box - otherwise you may still get 404 errors.
python manage.py runserver --insecure
UPDATE
actually digging into settings.py found the infringing line.
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'staticfiles'),
)
回答8:
I'm assuming you're using Django1.3+ here.
First off, you need to define a few more settings:
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
STATICFILES_DIRS = [
path.join(TOP_DIR, 'static'),
]
STATIC_ROOT = path.join(TOP_DIR, 'staticfiles')
STATIC_URL = '/static/'
This should help you find that directory.
Also, you should always access your static files using STATIC URL:
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
回答9:
in Django you have one more advantage for your templates and it's you can link statics like this and maybe this is your problem!
<script src="{% static 'myapp/bootstrap.min.js' %}"></script>
<link href="{% static 'myapp/bootstrap.css' %}" rel="stylesheet" type="text/css"/>
its better to use
{% static 'filename' %}
and its also easier to know more about, i refer to https://docs.djangoproject.com/en/1.11/intro/tutorial06/
回答10:
If you recently changed the debug to false in settings file. Follow this procedure.
Most of the time it is caused by debug setting to be false in settings.py. If you pass the --insecure switch to runserver it should work. So if you do python manage.py runserver 0.0.0.0:8000 change it to python manage.py runserver 0.0.0.0:8000 --insecure instead.
It should work.
回答11:
I think you missed to put the app INSTALLED_APPS in your settings.py file, you should add "mealmate"
INSTALLED_APPS = (
'mealmate',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
After that the static and command files will be visible to django. I was having trouble with commands and this is the way I fixed it.
回答12:
In my case, all I had to do was re-run the server:
python manage.py runserver
来源:https://stackoverflow.com/questions/12809416/django-static-files-404