【问题标题】:Serving static files from root of Django development server从 Django 开发服务器的根目录提供静态文件
【发布时间】:2014-05-29 17:48:05
【问题描述】:

我的目标是从我的开发服务器的根目录提供一个 Angular 项目。就 Django 而言,这些文件将是完全静态的,不需要 Django 模板处理。然后,Angular 项目将对位于同一开发服务器上 /api/ 的 Django 项目进行资源调用,然后该项目将返回从视图生成的 json 结果,以供 Angular 项目处理。

我认为这就像将以下内容添加到我的 urls.py 文件中一样简单。

url(r'^/', 'django.views.static.serve', {
        'document_root':'/Users/kyle/Development/project/site/app',
}),

或者

+ static("^/$", document_root="/Users/kyle/Development/project/site/app")

到 urlpatterns 的末尾。

/project/site/app 是 Angularjs 文件的目录。

但是,这两个都给我留下了 404 错误。

如果存在更明显的解决方案,我愿意更改项目的结构。

【问题讨论】:

    标签: python django angularjs


    【解决方案1】:

    您需要在 / 上同时提供 index.html 和静态文件,这在 Django 1.10 中是这样完成的:

    from django.contrib.staticfiles.views import serve
    from django.views.generic import RedirectView
    
    urlpatterns = [
    
        # / routes to index.html
        url(r'^$', serve,
            kwargs={'path': 'index.html'}),
    
        # static files (*.css, *.js, *.jpg etc.) served on /
        url(r'^(?!/static/.*)(?P<path>.*\..*)$',
            RedirectView.as_view(url='/static/%(path)s')),
    ]
    

    请参阅this answer,我在其中对此类配置进行了更完整的解释——尤其是如果您想将其用于生产。

    【讨论】:

    • 这个答案是在django.conf.urls.appterns 中使用django.contrib.staticfiles.views 的更好选择。
    【解决方案2】:

    事实证明,它是两件事的组合,正如 shavenwarthog 所说,它不应该有斜线。此外,它需要一个正则表达式将其定向到文件。最后一行是:

    url(r'^(?P<path>.*)$', 'django.views.static.serve', {
            'document_root':'/Users/kyle/Development/project/site/app',
    }),
    

    然后我可以访问像

    这样的文件
    http://localhost/beer.jpg
    

    【讨论】:

      【解决方案3】:
      1. 请注意,默认情况下 Django 不会提供目录列表。如果文件/Users/kyle/Development/project/site/app/beer.jpg 没有显示为http://localhost/beer.jpg,您还会收到 404 吗?

      2. urls.py 中的 URL 不以斜杠开头;比较 url(r'beer')url(r'^/beer')

      我建议只使用标准的 STATIC 支持。这很尴尬,但可以让您在开发过程中简单地提供文件,并切换到第 3 方服务器(即 Nginx)进行生产:

      https://docs.djangoproject.com/en/dev/howto/static-files/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-15
        • 2012-03-01
        • 2014-03-13
        • 2011-12-04
        • 2011-10-10
        • 1970-01-01
        • 2020-04-18
        • 1970-01-01
        相关资源
        最近更新 更多