繁体   English   中英

从Django开发服务器的根服务器提供静态文件

[英]Serving static files from root of Django development server

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

我认为这就像在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错误。

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

您需要同时提供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')),
]

看到这个答案 ,我写了一个更完整的解释,特别是如果你想用它来生产。

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

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

然后我可以访问像这样的文件

http://localhost/beer.jpg
  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支持。 这很尴尬,但是让你在开发过程中简单地提供文件,并切换到第三方服务器(即Nginx)进行生产:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM