【问题标题】:Django2.0 Collectstatic and Admin IssueDjango2.0 收集静态和管理问题
【发布时间】:2018-10-06 02:13:15
【问题描述】:

我正在将我的Django web application 部署到我的新服务器中以设置生产应用程序。

为了配置Apache2wsgi 2 天后,根据静态文件和管理静态页面,我遇到了一个新问题。

我的生产环境:

  • Ubuntu 服务器 16.4
  • Django 2.0.1
  • Python 3.5.2
  • Apache 2.4
  • WSGI

我的静态环境:

DatasystemsCORE
├── DatasystemsCORE
│   ├── settings.py
├── API-GED
├── Authentification
├── Configuration
├── Templates
├── static
│   ├── Theme
│      ├── Theme1
│          ├── css
│          ├── js
│          ├── images
│          ├── flags
│      ├── Theme2
│          ├── css
│          ├── js
│          ├── images
│          ├── flags
├── ...

如您所见,我有一个静态目录,其中包含所选主题的所有静态文件。

我必须制作:python3 manage.py collectstatic,以便根据我的静态目录中的管理部分导入静态文件。

我的 settings.py 文件:

# Static files (CSS, JavaScript, Images)
# http://docs.djangoproject.com/en/2.0.1/howto/static-files/

STATIC_URL = '/static/'
THEME_DIRS = os.path.join(BASE_DIR, "static", "Theme/")
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"), THEME_DIRS, ]

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

追溯:

Copying '/var/www/html/DatasystemsCORE/static/Theme/Datasystems/css/Base.css'
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/core/management/__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/core/management/base.py", line 335, in execute
    output = self.handle(*args, **options)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 189, in handle
    collected = self.collect()
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 114, in collect
    handler(path, prefixed_path, storage)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 354, in copy_file
    self.storage.save(prefixed_path, source_file)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/core/files/storage.py", line 49, in save
    return self._save(name, content)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/core/files/storage.py", line 236, in _save
    os.makedirs(directory)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/os.py", line 231, in makedirs
    makedirs(head, mode, exist_ok)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/os.py", line 231, in makedirs
    makedirs(head, mode, exist_ok)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/os.py", line 231, in makedirs
    makedirs(head, mode, exist_ok)
  File "/home/valentin/.virtualenvs/DSCoreEnv/lib/python3.5/os.py", line 241, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/var/www/html/DatasystemsCORE/DatasystemsCORE/static'

我不明白为什么 Django 在我现有的静态目录之外创建静态目录?为什么我的权限被拒绝?

如何将管理静态元素导入我的静态目录?

我假设静态文件来自此路径:.virtualenvs/DSCoreEnv/lib/python3.5/site-packages/django/contrib/admin/static/admin/

【问题讨论】:

  • 您的问题令人困惑,因为它混合了诸如APP1 之类的假名和DatasystemsCORE 之类的真实姓名。请注意,STATIC_ROOT 通常应该在您的 Django 项目之外。它不应该受版本控制。 collectstatic 命令将从管理应用程序STATICFILES_DIRS 中的目录收集静态文件。确保运行collectstatic 的用户具有正确的权限。
  • 我根据 DatasystemsCORE 和 APPn 编辑我的问题。我想将所有静态文件、目录收集到一个唯一的静态目录中。它是在我的 Django 项目中完成的,除了管理应用程序。
  • 我不确定您是否理解 STATIC_ROOT 是一个单独的目录,其中文件被收集到。它不应该包含在 STATICFILES_DIRS 中(收集静态文件的目录列表从)。目前,您的STATIC_ROOT 设置正在尝试将所有静态文件收集到/var/www/html/DatasystemsCORE/DatasystemsCORE/static,但运行manage.py collectstatic 的用户没有创建该目录的权限。
  • 好的,我明白了。我修改了 settings.py 以便在 /var/www/html 中获得一个新的静态目录(即在我的 Django 项目之外)。然后我执行collectstatic 和1294 个静态文件复制到这个新目录。最后,我的管理界面没有加载 css 样式。我必须修改其他内容?
  • 现在您需要配置 Apache 来为您的新静态目录提供服务。请参阅the docs 了解更多信息。

标签: django django-staticfiles collectstatic


【解决方案1】:

我根据帮助我解决问题的 Alasdair 的回答发布此答案。

我没有克服收集静态文件,因为我的目录在我的 Django Web 项目中。这是一个错误,我在 Django 项目之外创建了一个新目录。

我在我的 settings.py 文件中指定了路径。然后,我执行了这个命令:

python manage.py collectstatic

实际上,所有静态文件都在我的 ne 目录中,在 Django 项目之外,它工作正常!

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2019-11-23
    • 1970-01-01
    • 2017-03-03
    • 2012-10-30
    • 2020-08-08
    相关资源
    最近更新 更多