3

我在 Django 中开发了一个 Web 应用程序并部署了它,然后我发现管理页面没有加载 CSS。我在本地服务器中使用 css 获取管理页面,但在部署它时没有。 django-admin 图片

即使在使用后 python manage.py collectstatic 它也没有加载 css。

这是我的 settings.py 代码

from pathlib import Path
import os

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent

这是静态文件链接部分:

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

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'first_app/media')

即使在上面的代码之后,我也无法弄清楚为什么它没有链接 css 部分

Django 版本:3.1 Python 版本:3.8.3

请任何人都可以帮助我谢谢

4

7 回答 7

4

如果您在生产中,则必须运行:

python manage.py collectstatic --noinput

但是您还必须通过 Web 服务器提供静态文件。最简单的方法是使用 WhiteNoise:http ://whitenoise.evans.io/en/stable/

这将适用于 Nginx、Heroku 等。所以这是一个非常灵活的解决方案。

于 2020-10-19T03:04:30.767 回答
4

设置看起来不错。您可能需要collectstatic再次在生产环境中运行。

于 2020-10-17T13:42:41.560 回答
1

Django 在生产中不提供静态文件,您应该使用其他方法通过 apache2 或 nginx 提供文件。如果你很好或者知道一些 docker 容器,这里有一个教程,解释了如何部署 Django https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/

upstream hello_django {
    server web:8000;
}

server {

    listen 80;

    location / {
        proxy_pass http://hello_django;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /staticfiles/ {
        alias /home/app/web/staticfiles/;
    }

}

请在此处查看 django 文档https://docs.djangoproject.com/en/3.1/howto/static-files/deployment/

请查看这篇文章以了解没有 docker 容器的 apache2 https://programmingzen.com/serving-django-static-files-through-apache/

于 2020-10-13T02:13:34.690 回答
1

将此代码添加到您的 setting.py

DEBUG = False
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

运行后运行此命令:

python manage.py collectstatic --noinput

并使用 nginx 或 ...

并将静态文件路径添加到您的 Web 服务配置中,以便像这样

location /static/ {
    alias /home/{{your project path }}/static/;
}
于 2020-10-18T05:09:45.487 回答
0

在 settings.py 中试试这个:

STATIC_URL = '/static/'

MEDIA_URL = '/media/'

STATIC_ROOT = BASE_DIR / 'staic'

MEDIA_ROOT = BASE_DIR / 'media'

STATICFILES_DIRS = [BASE_DIR / 'static']

Django 3.1 文档

于 2020-10-21T21:29:56.363 回答
0

在这里做一个小把戏。运行 collectstatic 命令后,您将在 staticfiles 文件夹中获得管理静态信息。只需将其剪切并粘贴到静态文件夹中,我不知道为什么 Django 不支持生产中的管理静态。如果有人知道这个,欢迎您的回答

于 2020-10-17T17:18:31.280 回答
0

您没有提到您要在哪个服务器上部署应用程序这个可以回答https://www.thecodecity.com/2020/05/django-admin-static-files-not-loading.html

于 2020-10-18T15:48:18.240 回答