如何在django中的自定义URL上提供静态文件的目录

时间:2016-10-25 19:40:56

标签: django static-files

我正在开发一款django应用,其中包含从http://host/static提供的静态文件。

我有一个新的文件夹,里面装满了静态html / js / css,需要http://host/staff才能访问。

如何告诉django从该网址提供/ staff文件?

使用nginx或其他代理不是一种选择,也不会更改网址。

我能够通过添加urlpatterns += static('/staff/', document_root='staff')使其部分有效,但这仅适用于Debug = True

2 个答案:

答案 0 :(得分:1)

./manage.py runserver 是 Django 的开发服务器。它“神奇地”提供来自所有 <app>/static/(如果您添加 STATICFILES_DIRS= 则来自更多位置)的静态文件。

它们在 STATIC_URL= 上可见,通常设置了 STATIC_URL = '/static/'

如果您需要其他网址,请将以下内容添加到 urls.py 中:

from django.conf.urls.static import static
urlpatterns = [
    path(<url>, <function>),
] + static('/<otherurl>/', document_root='<path>/<otherstaticdir>/')

但是在生产中应该以不同的方式进行。您应该将所有 <app>/static/ 和其他 STATICFILES_DIRS 中的静态文件收集到通过 STATIC_ROOT= 定义的单个目录中。

从那里像 Whitenoise 这样的 Django 工具可以为静态文件提供服务(在更改静态文件时注意缓存和缓存失效)。

或者nginx可以配置为不向gunicorn+django(或uwsgi+django)发送静态文件请求而是直接服务。

相同,即。 Whitenoise 或 Nginx,您可以连接到 <otherstaticdir> 上可访问的额外 <otherurl>

答案 1 :(得分:0)

修改自https://docs.djangoproject.com/en/2.1/ref/urls/#static

staffImages = (small) => {
  const photoURL = small ? photo.url.replace(new RegExp("(.*)" + 'lg'), "$1sm") : `${photo.url}`;
  return (photos).map((photo, i) => small ? (
    <GridPhotoContainer key={i}>
      <Photo
        className="Photo"
        backgroundImage={photoURL}
        openModal={() => this.openModal(i, false, true)}
      />
    </GridPhotoContainer>
  ) : (
    <Photo
      key={i}
      className="Photo"
      backgroundImage={photoURL}
      openModal={() => this.openModal(i, false, true)}
    />
    )
  )
} 

renderStaffImages = (
  <Media query="(max-width: 768px)">
    {matches => (
        <Grid className="Grid" marginTop={matches ? '0' : '3em'}>
          {staffImages(matches)}
        </Grid>
      )
    }
  </Media>
)

ROOT是您要提供服务的文件夹的路径。它应该是操作系统上文件的绝对路径。

PATH是将在其中提供文件的路径。如果您的网站是https://example.com,并且您设置了from django.conf import settings from django.conf.urls.static import static PATH = '/custom-static-files/' ROOT = '/var/www/html/custom-static-files/' urlpatterns = [ # ... the rest of your URLconf goes here ... ] + static(PATH, document_root=ROOT) ,则文件将以https://example.com/custom-static-files/

的形式提供。