【问题标题】:Serving django static files in development envirnoment在开发环境中提供 django 静态文件
【发布时间】:2012-01-26 23:08:44
【问题描述】:

我想使用静态文件通过 runserver 命令加载我的 css。问题是我尝试了我在stackoverflow和django文档中找到的所有解决方案,但它根本不起作用......我不知道我能做什么...... 如果我设置了

STATIC_URL = '/static/'
STATIC_ROOT = 'C:\Users\Max\Works\www\mysite\mysite\static'
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

我认为这已经足够了......我错过了什么吗? 你能告诉我在开发环境中拥有静态文件的最佳设置是什么吗? 感谢您的建议...

编辑(1) 我已经放入了我的模板 {{ STATIC_URL }}css/dark-grey.css" 并且 css 在 C:\Users\Max\Works\www\mysite\mysite\static\css\dark-grey.css 中,我真的不明白是怎么回事......

【问题讨论】:

    标签: django static-files django-staticfiles


    【解决方案1】:

    在路径中使用 / 斜杠而不是 \ 斜杠,即使对于 windows 路径也是如此。

    【讨论】:

      【解决方案2】:

      在你的 settings.py 中

      调试=真

      根据文档:

      此视图由 runserver 自动启用(带有 DEBUG 设置 设置为 True)。

      使用 URL 模式是一种强制方法,只要 DEBUG=True,我个人甚至不必在我的项目中这样做。您在开发时总是会打开 DEBUG,而当您切换到生产环境时,您甚至都不会使用开发服务器,因此您会将生产服务器指向静态位置。

      这是来自我的 settings.py 的静态设置的 sn-p。我不必手动添加该静态视图 URL

      import os
      
      DEBUG = True
      
      PROJECT_ROOT = os.path.dirname( __file__ )
      PROJECT_NAME = os.path.basename(PROJECT_ROOT)
      
      STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static/')
      STATIC_URL = '/static/'
      
      # Additional locations of static files
      STATICFILES_DIRS = (
          # Put strings here, like "/home/html/static" or "C:/www/django/static".
          # Always use forward slashes, even on Windows.
          # Don't forget to use absolute paths, not relative paths.
          os.path.join(PROJECT_ROOT, 'web/'),
      )
      
      # 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',
      )
      
      
      TEMPLATE_CONTEXT_PROCESSORS = (
          ...
          'django.core.context_processors.static',
          ...
          ...
      )
      

      【讨论】:

      • 试过了,但它根本不起作用。我将您的代码复制/粘贴到我的 settings.py 中,它像以前一样给了我 404 错误...
      • 只是复制和粘贴不会立即修复它。您是否修改了 STATICFILES_DIRS 以指向包含您的静态内容的目录?我的在项目根目录下被称为 web/ 。那是我保留所有顶级一般静态内容的地方。如果应用程序有自己的应用程序,则每个应用程序下都会​​有一个 static/ 目录。 STATIC_ROOT 实际上对于当前的情况并不重要。
      • 是的,我知道了,现在它可以工作了,非常感谢...现在我的模板没有正确替换文件路径的问题... href="css/dark-grey. css” 如果我输入 source href="{{ STATIC_URL }}css/dark-grey.css"
      • @MaksimSinik - 将此添加到您的 TEMPLATE_CONTEXT_PROCESSORS: 'django.core.context_processors.static',否则它不会解析该标签
      • 我的 settings.py 中什至没有 TEMPLATE_CONTEXT_PROCESSORS,这是正常行为吗?
      【解决方案3】:

      您还需要运行以下命令将静态文件移动到正确的位置(并让 Django 知道它们在那里):

      python manage.py collectstatic
      

      关于 Django 1.3 中静态文件的完整文档在这里: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

      【讨论】:

      • 这仅在您将运行生产服务器并需要指向静态位置时才需要。在开发服务器中,它将检查您的静态定义目录和应用程序的静态/目录
      • 实际上我已经做到了,现在我的 /static/ 文件夹中已满是文件,而且在其中我还有另一个 /static/ 与我原来的 css 文件夹和文件...我可以访问 css 在127.0.0.1:8000/static/static/css/dark-grey.cssO_o
      • @MaksimSinik - 实际上你不应该在 STATIC_ROOT 中放置任何东西。这就是当您使用此 collectstatic 命令收集它并将您的生产服务器指向的位置时它将去的地方。当您处于开发服务器模式时,它会在您的应用程序的静态/子目录以及您在 STATICFILES_DIRS 中指定的额外目录中为您发现静态内容(请参阅我的答案)
      • 感谢上帝!今天下午我浪费了 4 个小时来解决这个问题...我阅读了 2000 次文档和东西,但无法得到它...我现在将 css 文件夹放在我的博客应用程序中,并且它可以工作...现在我可以看到它带有直接链接,但我无法使用 {{ STATIC_URL }}css/dark-grey.css 将其包含在我的模板中,有什么建议吗?
      • @MaksimSinik - 将此添加到您的 TEMPLATE_CONTEXT_PROCESSORS: 'django.core.context_processors.static',否则它不会解析该标签
      【解决方案4】:

      您需要添加 url 模式:

      from django.contrib.staticfiles.urls import staticfiles_urlpatterns
      
      # ... the rest of your URLconf here ...
      
      urlpatterns += staticfiles_urlpatterns()
      

      查看文档here

      【讨论】:

      • 我做了同样的错误,找不到页面 (404) 请求方法:GET 请求 URL:127.0.0.1:8000/static/css/dark-grey.css
      • 嗯好的。让我们看看它是否与您在 static_url 中的 Windows 路径有关?你能用附加的 / 检查它吗?
      • 对不起,我的意思是在你的 static_root 设置的末尾附加一个“/”
      • 如果您使用 DEBUG=True 运行,则不需要添加此项。看我的回答
      • 其实我用 jdi 建议修复了这部分,但我仍然有上下文处理器的问题......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2018-10-11
      • 2014-03-13
      • 1970-01-01
      • 2013-12-22
      • 2012-03-25
      • 2015-08-06
      相关资源
      最近更新 更多