django静态文件不起作用

时间:2012-08-20 17:26:59

标签: python django

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

我已经看过这个问题的一堆修复,但我还没有找到解决方案。

这是我的配置:

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')}),
)

settings.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.

看起来静态目录已被映射出来,但子目录不是。

6 个答案:

答案 0 :(得分:10)

在开发中:

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

  • 如果您的文件位于本地计算机中,则STATIC_URL应为“/ static /”,否则请将基本网址放在此处,例如“http://example.com/

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

在模板中,加载staticfiles模块:

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

生产中:

  • 添加django使用的“STATIC_ROOT”将所有静态文件从“STATICFILES_DIRS”收集到它

  • 收集静态文件

$ python manage.py collectstatic

  • 将路径添加到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/

答案 1 :(得分: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'^静态行

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

至少这是在django 1.3及以上版本中完成的方式

答案 2 :(得分:5)

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

将此添加到您的urls.py并在DEBUG=True

中设置settings.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}),
        )

答案 3 :(得分:0)

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

答案 4 :(得分:0)

您可以进行类似的设置

  1. 在settings.py内部添加静态目录路径

     STATICFILES_DIRS = [
         BASE_DIR / "static"
     ]
    

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

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

     urlpatterns += staticfiles_urlpatterns()
    

答案 5 :(得分:0)

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

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

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

  1. 打开主项目文件夹中的 setting.py 文件,然后
  2. 最后将此代码粘贴到 settings.py 中:
STATIC_URL = '/static/'

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

然后重新启动 VS Code。