如何从django的开发服务器提供角度2应用程序?

时间:2017-03-29 21:45:06

标签: django angular django-rest-framework

我有一个项目,我使用Angular2来使用我使用Django-Rest-Framework构建的rest API。目前我必须使用django开发服务器启动django api,例如,' python manage.py runserver'然后我必须使用' npm start'启动角度2服务器。或者通过cli,发送服务'。有什么方法可以设置我的django项目来为angular2项目提供服务吗?

2 个答案:

答案 0 :(得分:3)

我假设Django-Rest-Framework在某处提供服务静态资产的选项,对吗?

如果这是真的,您可以配置角度cli以将其构建输出生成Django能够提供的文件夹。 ng build的输出是一组静态资产(js,css和index.html),可以由任何Web服务器提供。因此,如果您将.angular-cli.json中的git commit -a选项更改为指向Django设置中的静态资源文件夹,则只需运行单个文件夹即可获益。

这种方法有两个主要缺点。首先,您现在必须积极记住每次更新角度项目时都要运行ng build,并希望查看新的更改 - 您将失去使用ng serve时发生的自动更新和重新加载。第二个缺点是在构建更改后,ng build明显慢于ng服务更新(因为前者必须写入文件系统,而后者只是将文件保存在内存中)。

在Angular文件的每次保存中都有记得要记住outDir的方法,但要么需要使用gulp或grunt或其他任务运行器来监视文件更改并运行命令,或者利用Django用于自动文件查看和重新加载的任何功能,并弄清楚如何勾选(我不熟悉Django,但Rails有ng serve来帮助这些类型的设置)。

我希望有所帮助。

(老实说,我对Rails进行了类似的设置并最终删除它并且只是并排运行两台服务器 - 这样的压力就更小了。)

答案 1 :(得分:1)

  1. 将index.html文件放在templates/<project-name>目录中。
  2. 使用此函数来提供index.html,它是angular

    的入口点
    def index(request):
        return render(request, template_name='<project-name>/index.html')
    
    1. 将所有角度静态文件放在STATICFILES_DIRS中,以便collectstatic命令收集它们。

    2. 在index.html中的静态文件路径中使用{{ STATIC_URL }}来访问它们

    3. 现在,当您访问索引功能时,您的角度应用程序将会被提供。