我无法获取静态文件。我尝试了各种设置和目录配置等等,但它们只是变成了404s。我安装了debug_toolbar,因此知道STATIC_URL正在到达我的请求上下文。
目录结构显示/静态(我还将目录放在了饭菜app文件夹和用户中,只是为了试一试。
/mealmate
/mealmate
/meals
/static
/css
/bootstrap.min.css
/templates
/users
Settings.py(虽然我已尝试过各种其他设置,但有一些重要设置):
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'
在base.html渲染
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
有什么想法吗? 感谢
答案 0 :(得分:95)
这是django for windows中静态/媒体/模板访问的工作解决方案,
settings.py
import os.path
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )
答案 1 :(得分:24)
对我而言,原因是settings.py
中将debug设置为false。解决方法是将--insecure
开关传递给runserver
,但真正的解决方案是使用适当的Web服务器来提供静态文件。有关详细信息,请参阅this question的答案。
答案 2 :(得分:21)
如果您在Web服务器上运行此操作,您是否将静态文件复制到公共可访问文件夹?例如:
# 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',
)
然后您可以使用此帖子Django static Files并使用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
希望有所帮助!
答案 3 :(得分:5)
我只是添加了相当于
的内容STATICFILES_DIRS = (
'/absolute_path_to_project/mealmate/static',
)
让这个工作。当然,将absolute_path_to_project
替换为您的实际路径,并在必要时添加驱动器号。
答案 4 :(得分:5)
我也陷入了404问题,直到我意识到Apache已经阻止了对静态目录的请求。我使用python manage.py collectstatic
将所有静态文件复制到项目根目录下的 static 目录,即 / var / my / site / static 。与
Alias /static /var/my/site/static
<Directory /var/my/site/static>
Require all granted
</Directory>
在 /etc/httpd/conf/httpd.conf 中,它现在可以正常使用。
如果上述答案都不起作用,您可以考虑检查服务器配置。
答案 5 :(得分:4)
确保您的同伴在您的INSTALLED_APPS
中答案 6 :(得分:3)
来自上面的评论 - 运行此
python manage.py findstatic --verbosity 2 css/styles.css
找不到&#39; css / styles.css&#39;。
的匹配文件查看以下位置:
/用户/提供yourname /文档/工作区/测试/ staticfiles
我只是将静态文件夹重命名为 staticfiles ,一切都很顺利。 (我在osx + django 1.x上)
如果你在本地开发盒上,使用不安全模式可能不会受到伤害 - 否则你可能仍然会收到404错误。python manage.py runserver --insecure
更新
实际上挖掘settings.py发现了侵权行。
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'staticfiles'),
)
答案 7 :(得分:2)
我假设你在这里使用Django1.3 +。
首先,您需要定义更多设置:
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/'
这可以帮助您找到该目录。
此外,您应始终使用STATIC URL
访问静态文件:
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
答案 8 :(得分:2)
如果您最近在设置文件中将调试更改为false。请按照以下步骤操作。
在大多数情况下,它是由settings.py中的调试设置引起的。如果将--insecure开关传递给runserver,则它应该可以工作。因此,如果您将python manage.py runserver 0.0.0.0:8000
更改为python manage.py runserver 0.0.0.0:8000 --insecure
。
应该可以。
答案 9 :(得分:1)
在我的情况下,我的静态文件位于resources/static
目录中,并且设置了一些设置,例如settings.py
文件中的blow:
STATICFILES_DIRS = (
os.path.join(BASE_DIR, './resources/static/'),
)
并像这样在我的模板中使用它:
% load static %}
<link rel="stylesheet" type="text/css" href="{% static '/plugins/bootstrap/css/bootstrap.css' %}">
这种方式对我有用。
答案 10 :(得分:1)
在setting.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
答案 11 :(得分:0)
在项目主文件夹中的 settings.py 中插入以下几行:
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join('static'))
然后,在html文件中插入:
{% load static %}
最后,在 settings.py 中,将 django.contrib.staticfiles
添加到 INSTALLED_APPS = [...]
答案 12 :(得分:0)
对我来说,除了运行manage.py runserver myip:port外,我什么也不做。然后关闭它并重新启动uwsgi,静态文件成功加载。我不知道为什么,但是对我有用...
答案 13 :(得分:0)
我遇到了同样的问题。在这里,我如何解决在模板中访问静态文件的问题。
我的Django项目(Recognition /)文件目录如下:
/media
/1
i1.jpg
i2.jpg
....
/static
/css
/op.css
/img
/emoji.png
/Recognition
...
/settings.py
/urls.py
...
/uploader
...
/urls.py
/templates
/uploader
/create.html
...
我的settings.py看起来像这样:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'Recognition',
'uploader',
]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
我的(Recognition / urls.py)如下:
urlpatterns = [
path('admin/', admin.site.urls),
...
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
然后我要像这样访问template(create.html)中的所有静态文件和媒体文件: 这是示例代码
<!DOCTYPE html>
<html>
<head>
{% block extrahead %}
<link rel="stylesheet" type="text/css" href="static/css/op.css">
{% endblock %}
</head>
<style type="text/css">
.notfound .notfound-404 {
...
background-image: url('static/img/emoji.png');
...
}
<style>
<body>
<img src="{{ MEDIA_ROOT }}/media/i1.jpg" class="image_responsive" height="100px" width="100px">
</body>
OR
您可以使用此django命令查看django在哪里查看您的静态文件。 SOURCE
python manage.py collectstatic --help
答案 14 :(得分:0)
在Cpanel上,这是一个很好的解决方案here
在cpanel的终端上安装dj-static static3
pip install dj-static static3
然后在wsgi.py中替换此代码py应用程序
from dj_static import Cling
application = Cling(get_wsgi_application())
答案 15 :(得分:0)
就我而言,我要做的就是重新运行服务器:
python manage.py runserver
答案 16 :(得分:0)
我认为您错过了将应用INSTALLED_APPS放入您的settings.py文件中,应该添加“ mealmate”
pywikibot
之后,django将看到静态文件和命令文件。我在使用命令时遇到了麻烦,这就是我解决问题的方法。