在生产中不使用Django模板的情况下将Django + Angular部署到EB

时间:2018-09-15 09:29:09

标签: django angular amazon-s3

我已经读过一百万个答案,但是找不到有效的解决方案。

我有一个用于所有API调用的Django DRF后端,还有一个单独的Angular(5)前端项目。 Django后端已部署到Elastic Beanstalk,并且工作正常。

我要做的就是部署有角度的前端,而无需将模板标签添加到html中。更好的是,我不想更改内置的dist Angular文件夹中的任何内容。

我看到有几种方法-据我所知,最好的方法是通过常规Django url提供index.html,然后公开所有dist文件夹(静态文件)。

我使用以下方法实现了第一部分:

urlpatterns += [
    url(r'^$', TemplateView.as_view(template_name='index.html')),
    url(r'^(?P<path>.*)/$', TemplateView.as_view(template_name='index.html')),
]

,然后在settings.py中将dist文件夹定义为模板文件夹:

ANGULAR_APP_DIR = os.path.join(BASE_DIR, 'client/dist')

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [ANGULAR_APP_DIR],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.template.context_processors.i18n',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

当前,我定义了一个s3存储桶以容纳所有静态文件。当我部署代码并将所有静态文件(包括dist中的文件)放置在s3上的正确位置时,'collectstatic'运行,因为我添加了以下代码:

STATICFILES_DIRS = [
    ANGULAR_APP_DIR,
]

我无法弄清楚如何从基本URL(“ /”)提供所有其他静态文件(js,css资产),这是Angular应用程序期望其进入的位置。

我不确定是否应该尝试通过Django url将调用重定向到s3存储桶,或者是否应该与s3上的路由完全与Django分开。 什么是更好的方法,如何完成?

谢谢!

0 个答案:

没有答案