2017-09-06 53 views
0

我试图捆绑一个角度应用程序并将其部署在Django的REST框架DRF应用程序的静态内容。Django的REST框架路由为嵌入式应用角度

我不知道Django的或DRF可言不过,我想借此路由的控制来表达这样的事情:

对于/管理/ * - 委托给内置Django管理。

对于/ API/* - 委托给Django的REST框架

对于/只,和/ * - 治疗从 “一些指定的项目文件夹” 加载静态内容,所以 /映射到文件./static/ index.html /assets/pic.jpg映射到./static/assets/pic.jpg

我一直无法实现上述目标。所有我是这样的:

在./templates/index.html为index.html的生活模板观点 - 这是从项目的角度,而不是Django模板。

手动复制其他的WebPack捆绑内容./static如供应商|。哈希| .bundle.js

的另一个问题是如何处理资产做。在角度项目,HTML视图经由指资产/资产是在相同的水平的index.html

我已经得到过使用该命令线路路径一些控制:

ng build --deploy-url=/static --output-path=../backend/tutorial/static 

的deploy-在index.html中捆绑的资产引用网址ARG结果通过/静态的,这意味着Django的可以为他们提供服务(但不为favicon.ico出于某种原因)被前缀。

输出路径ARG转储所有的地方不是默认的“DIST”文件夹以外的资产。

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^api/', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 
    url(r'^', TemplateView.as_view(template_name="index.html")), 
] 

Url模式看起来像上面那样。

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "static") 
] 

STATIC_URL = '/static/' 

这些是静态设置。我需要的是能够说“/静态”和“/资产”都是静态的资产的文件夹。

我不知道什么是TemplateView(URL模式)。也许有一个StaticFilesView或将URL映射到磁盘上的路径?

回答

1

Blockquote 这些是静态设置。我需要的是能够说“/静态”和“/资产”都是静态资产文件夹。 大段引用

可以实现与以下步骤:在NGINX站点配置文件

  1. 添加/资产静态目录:

    server { 
        .... 
        .... 
        # your Django project's static files - required 
        location /static { 
         alias /path/to.../static; 
        } 
        # your Angular project's static files 
        location /assets { 
         alias /path/to.../assets; 
        } 
        .... 
        .... 
    } 
    
  2. 在你的Django的网址。PY加:

    from django.views.static import serve as static_serve 
    
    urlpatterns = [ 
        .... 
        url(r'^assets/(?P<path>.*)$', static_serve,  
            {'document_root':'/path/to.../assets'}), 
        .... 
        .... 
    ] 
    

就是这样。您不必在Django设置中触摸静态配置。

STATIC_URL = '/static/' 
    MEDIA_URL = '/media/' 
    MEDIA_ROOT = os.path.join(DATA_DIR, 'media') 
    STATIC_ROOT = os.path.join(DATA_DIR, 'static') 

    STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'reservation_exchange', 'static'), 
    )