14

出于某种原因,django 没有提供我的静态文件。

我已经查看了很多解决此问题的方法,但我仍然没有找到解决方案。

这是我的配置:

网址.py

urlpatterns = patterns('',
    (r'^$', index),
    (r'^ajax/$', ajax),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': path.join(path.dirname(__file__), 'static')}),
)

设置.py

STATIC_ROOT = '/home/aurora/Code/django/test/static/'
STATIC_URL = '/static/'
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

当我导航到http://localhost:8000/static/css/default.css
我得到这个错误:'css/default.css' could not be found

当我导航到http://localhost:8000/static/
我得到这个错误:Directory indexes are not allowed here.

看起来静态目录正在映射,但子目录没有。

4

6 回答 6

17

开发中:

  • STATICFILES_DIRS应该有所有静态文件所在的所有静态目录

  • STATIC_URL应该是/static/如果您的文件在本地计算机中,否则将基本 URL 放在这里,例如“http://example.com/”

  • INSTALLED_APPS应包括'django.contrib.staticfiles'

在模板中,加载 staticfiles 模块:

{% load staticfiles %}
..
..
<img src='{% static "images/test.png" %}' alt='img' />

生产中:

  • 添加STATIC_ROOTDjango 用来收集所有静态文件的STATICFILES_DIRS内容

  • 收集静态文件

python manage.py collectstatic [--noinput]
  • 将路径添加到 urls.py
from . import settings
    ..
    ..
urlpatterns = patterns('',
..
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.STATIC_ROOT)}),)`

更详细的文章如下:

http://blog.xjtian.com/post/52685286308/serving-static-files-in-django-more-complicated

http://agiliq.com/blog/2013/03/serving-static-files-in-django/

于 2015-03-16T22:01:45.827 回答
7

尝试运行python manage.py collectstatic并查看收集静态文件的位置。

将此添加到您的并urls.py设置DEBUG=Truesettings.py

if settings.DEBUG:
    urlpatterns += patterns('',
             (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes':True}),
         )

    urlpatterns += patterns('',
            (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes':True}),
        )
于 2012-08-20T17:47:34.543 回答
5

我认为您不需要 urls.py 中的静态路径,删除它,它应该可以工作。

目前是这样的

urlpatterns = patterns('',
    (r'^$', index),
    (r'^ajax/$', ajax),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': path.join(path.dirname(__file__), 'static')}),
)

只需删除 r'^static 行

urlpatterns = patterns('',
    (r'^$', index),
    (r'^ajax/$', ajax),
)

至少这是在 django 1.3 及更高版本中完成的

于 2012-08-20T17:34:52.393 回答
2

你可以做这样的设置

  1. 在 settings.py 里面添加静态目录路径

     STATICFILES_DIRS = [
         BASE_DIR / "static"
     ]
    

    参考:https ://docs.djangoproject.com/en/3.1/howto/static-files/

  2. 在 urls.py 中添加一行代码

     urlpatterns += staticfiles_urlpatterns()
    
于 2020-09-21T07:37:05.977 回答
0
STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
于 2019-08-08T20:53:42.153 回答
0

我正在使用以下设置:(2021 年 4 月)

  • macos 大肯定
  • 代码
  • Ananconda 3(用于环境)

当我尝试使用http://localhost:8000/static/test.txt如果在静态文件夹中存在 test.txt 文件来访问我在 Django 中的静态文件时。

  1. setting.py然后在您的主项目文件夹中打开文件
  2. 最后把这段代码粘贴进去settings.py
STATIC_URL = '/static/'

# Added Manually
STATICFILES_DIRS = [
    BASE_DIR / "static",
]

然后重新启动 VS 代码。

于 2021-04-18T14:49:16.597 回答