2017-09-06 52 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'), 
    )