Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django static(settings.static\u URL,document\u root=settings.static\u root)实际上做什么?_Python_Django_Django Settings - Fatal编程技术网

Python Django static(settings.static\u URL,document\u root=settings.static\u root)实际上做什么?

Python Django static(settings.static\u URL,document\u root=settings.static\u root)实际上做什么?,python,django,django-settings,Python,Django,Django Settings,我正在使用Django 2.2。从Django管理静态文件: 如果如上所述使用django.contrib.staticfiles,请运行服务器 当DEBUG设置为True时,将自动执行此操作。如果你不 如果在已安装的应用程序中有django.contrib.static文件,您仍然可以 使用django.views.static.service()手动提供静态文件 视图 这不适合生产使用!对于一些常见的部署 策略,请参阅部署静态文件 例如,如果您的静态URL被定义为/STATIC/,您可以 通

我正在使用Django 2.2。从Django管理静态文件:

如果如上所述使用django.contrib.staticfiles,请运行服务器 当DEBUG设置为True时,将自动执行此操作。如果你不 如果在已安装的应用程序中有django.contrib.static文件,您仍然可以 使用django.views.static.service()手动提供静态文件 视图

这不适合生产使用!对于一些常见的部署 策略,请参阅部署静态文件

例如,如果您的静态URL被定义为/STATIC/,您可以 通过将以下代码段添加到您的URL.py,可以实现此目的:

注意

此助手函数仅在调试模式下工作,并且仅在给定 前缀是本地的(例如/static/),而不是URL(例如。 )

此外,这个助手函数只服务于实际的静态根文件夹; 它不执行静态文件发现,就像 django.contrib.staticfiles

我的解释

  • 是一个助手函数,在开发过程中为来自
    静态\u根
    的文件提供服务(这是真的吗?)
  • 仅在
    debug=True
  • 仅适用于本地前缀,如
    STATIC\u URL='/STATIC/'
  • DEBUG
    设置为True,并且我按照文档中的说明使用并设置staticfiles应用程序时,如果我使用
    python manage.py runserver
    启动本地服务器,静态文件的服务将自动处理(True??)
  • 我的问题

  • static(settings.static\u URL,document\u root=settings.static\u root)
    添加到项目的
    URL.py
    中到底有什么作用
  • 是否从
    static\u ROOT
    目录本地提供静态文件?为了测试这一理论,在运行了
    collectstatic
    之后,我删除了
    static
    目录,以查看静态文件是否仍然可以正常加载(从静态根目录加载),而不是正常加载!为什么?
  • 如何验证Django是否正在从我的静态根位置加载静态文件。。。而不是我的项目和应用程序中的静态目录
  • 如果Django自动提供静态文件(文档中提到),为什么要将
    static(settings.static\u URL,document\u root=settings.static\u root)
    添加到
    urlpatterns
  • 示例

    设置.py

    DEBUG = True
    
    ...
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        ...
        'django.contrib.staticfiles',
        'puppies.apps.PuppiesConfig'
    ]
    
    ...
    
    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),
    ]
    
    STATIC_ROOT = 'c:/lkdsjfkljsd_cdn'
    
    在我所有的模板中,我都使用
    {%load static%}

    然后我做:
    python manage.py collectstatic

    此时,我的
    url.py中是否包含以下内容似乎并不重要-我的静态文件仍在加载,但我不知道它们是否来自我的项目的静态目录或静态根目录(c:/lkdsjfkljsd\u cdn):

    最后,如果我删除项目中的那些静态目录,所有css、js和图像都无法工作,这让我相信Django项目是从项目的静态目录加载静态文件,而不是从静态根目录加载静态文件

    那么,再一次,我如何告诉Django从我的静态根位置加载静态文件。。。而不是我的项目和应用程序中的静态目录???或者,我是否误解了Django不应该从我的静态根位置本地加载文件

    *编辑(添加HTML图像)


    我认为你把一些事情弄混了。让我澄清一下

    根据文档,它提供了用于服务静态文件的URL模式。如果您转到,您将看到:

    return [
            re_path(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs),
    ]
    

    在生产中,媒体文件也应该由反向代理服务器提供。

    如果
    service
    从文档根目录提供文件,并且文档根目录通常设置为类似于document\u root=settings的值。STATIC\u root,这是否意味着
    service
    将从STATIC\u root位置提供文件?你的回答很有帮助。是的,当然。但同样,不建议在生产设置中使用它。我不理解,因为我确实添加了
    urlpatterns+=static(settings.static\u URL,document\u root=settings.static\u root)
    。这是指引用
    document\u root=settings.STATIC\u root
    。我的静态_根是'c:/lkdsjfkljsd_cdn'。这就是我没有得到的——如果我要将静态文件收集到我的'c:/lkdsjfkljsd_cdn'文件夹中,然后删除我的Django项目和应用程序中的静态目录,为什么这会破坏我所有的静态文件?他们不应该在“c:/lkdsjfkljsd_cdn”中寻找这些资产吗?在这里大声思考。这是我无法理解的。你能检查一下你是否正确地获取静态文件,比如
    127.0.0.1:8000/static/js/some.js
    ?嗯,是在你从项目中删除静态文件并添加
    urlpatterns+=static(settings.static\u URL,document\u root=settings.static\u root)
    之后吗?
    if settings.DEBUG is True:
        urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    
    return [
            re_path(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs),
    ]
    
    if settings.DEBUG:
        urlpatterns += [
            re_path(r'^media/(?P<path>.*)$', serve, {
                'document_root': settings.MEDIA_ROOT,
            }),
        ]