2016-10-23 2 views
2

Я решил интегрировать существующее приложение Angular 2 в проект Django REST.Django and Angular 2 templateUrl

  1. создать Django приложение со статической папкой для моего интерфейса:

    urls.py:

    from django.conf.urls import url 
    from frontend import views 
    from django.conf import settings 
    from django.conf.urls.static import static 
    
    
    urlpatterns = [ 
        url(r'^$', views.index, name='index'), 
    ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
    

    views.py:

    from django.shortcuts import render 
    
    def index(request): 
        """ 
        Renders the Angular2 SPA 
        """ 
        return render(request, template_name='index.html') 
    
  2. пошевелить Angu лар 2 Приложения к FRONTEND статической папки

  3. добавить статические параметры в моих настройках:

    STATIC_URL = '/static/' 
    STATICFILES_DIRS = [ 
        os.path.join(BASE_DIR, 'frontend', 'static'), 
    ] 
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
    
  4. внести изменения в index.html:

    <html> 
        <head> 
        <base href="/"> 
        <title>PhotoHub</title> 
        <meta charset="UTF-8"> 
        <meta name="viewport" content="width=device-width, initial-scale=1"> 
        {% load staticfiles %} 
    
    
        <link rel="stylesheet" href="{% static "node_modules/bootstrap/dist/css/bootstrap.min.css" %}"> 
        <link href="{% static "bower_components/font-awesome/css/font-awesome.min.css" %}" rel="stylesheet" /> 
        <link href="{% static "bower_components/alertify.js/themes/alertify.core.css" %}" rel="stylesheet" /> 
        <link href="{% static "bower_components/alertify.js/themes/alertify.bootstrap.css" %}" rel="stylesheet" /> 
        <link rel="stylesheet" href="{% static "styles.css" %}"> 
    
        <script src="{% static "bower_components/jquery/dist/jquery.min.js" %}"></script> 
        <script src="{% static "node_modules/bootstrap/dist/js/bootstrap.min.js" %}"></script> 
        <script src="{% static "bower_components/alertify.js/lib/alertify.min.js" %}"></script> 
        <!-- 1. Load libraries --> 
        <!-- Polyfill(s) for older browsers --> 
        <script src="{% static "node_modules/core-js/client/shim.min.js" %}"></script> 
        <script src="{% static "node_modules/zone.js/dist/zone.js" %}"></script> 
        <script src="{% static "node_modules/reflect-metadata/Reflect.js" %}"></script> 
        <script src="{% static "node_modules/systemjs/dist/system.src.js" %}"></script> 
        <!-- 2. Configure SystemJS --> 
        <script src="{% static "systemjs.config.js" %}"></script> 
        <script> 
         System.import('app').catch(function(err){ console.error(err); }); 
        </script> 
        </head> 
        <!-- 3. Display the application --> 
        <body> 
        <photohub></photohub> 
        </body> 
    </html> 
    
  5. внести изменения в systemjs.config.js :

    (function (global) { 
        System.config({ 
        //static 
        defaultJSExtensions: true, 
        paths: { 
         // paths serve as alias 
         'npm:': 'static/node_modules/' 
        }, 
        // map tells the System loader where to look for things 
        map: { 
         app: 'static/dist', 
         // angular bundles 
         '@angular/core': 'npm:@angular/core/bundles/core.umd.js', 
         '@angular/common': 'npm:@angular/common/bundles/common.umd.js', 
         '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', 
         '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', 
         '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', 
         '@angular/http': 'npm:@angular/http/bundles/http.umd.js', 
         '@angular/router': 'npm:@angular/router/bundles/router.umd.js', 
         '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', 
         // other libraries 
         'rxjs':      'npm:rxjs', 
         'angular-in-memory-web-api': 'npm:angular-in-memory-web-api', 
        }, 
        // packages tells the System loader how to load when no filename and/or no extension 
        packages: { 
         app: { 
         main: './main.js', 
         defaultExtension: 'js' 
         }, 
         rxjs: { 
         defaultExtension: 'js' 
         }, 
         'angular-in-memory-web-api': { 
         main: './index.js', 
         defaultExtension: 'js' 
         } 
        } 
        }); 
    })(this); 
    

машинописи файлы компилируются в /dist и шаблоны остались в /app. Когда я использовал два разных сервера путь для templateUrl выглядеть следующим образом:

templateUrl: './app/app.component.html' 

теперь я пытаюсь объявить templateUrl этот путь, но он не работает:

templateUrl: '{{ STATIC_URL }}' + '/app/app.component.html' 

Как бороться с Шаблоны URL теперь?

Ответ:

"GET /app/components/login/login.component.html HTTP/1.1" 404 2601
Не найдено: /app/app.component.html

JavaScript файлы загружены хорошо:

"GET /app/components/login/login.component.html HTTP/1.1" 404 2601
Не Fou nd: /app/components/register/register.component.HTML

+0

Это много полезной информации, чтобы потом выручить с помощью * «не работает» *. – jonrsharpe

ответ

1

Эта проблема решена:

templateUrl: 'static/app/app.component.html' 
Смежные вопросы