#python #django #angular #django-rest-framework
#python #django #angular #django-rest-framework
Вопрос:
Я решил интегрировать существующее приложение Angular 2 в мой проект Django REST.
-
создайте приложение 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')
-
переместите мое приложение Angular 2 в статическую папку интерфейса
-
добавьте статические настройки в мои настройки:
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'frontend', 'static'), ] STATIC_ROOT = os.path.join(BASE_DIR, 'static')
-
внесите изменения в 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>
-
внесите изменения в
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);
Файлы TypeScript скомпилированы в /dist
, а шаблоны остались в /app
. Когда я использовал два разных сервера, путь к templateUrl
выглядел так:
templateUrl: './app/app.component.html'
теперь я пытаюсь объявить templateUrl
таким образом, но это не работает:
templateUrl: '{{ STATIC_URL }}' '/app/app.component.html'
Как теперь работать с URL-адресами шаблонов?
Ответ:
«ПОЛУЧИТЬ /app/components/login/login.component.html HTTP/1.1″404 2601
Не найден: /app/app.component.html
Файлы JavaScript загружаются хорошо:
«ПОЛУЧИТЬ /app/components/login/login.component.html HTTP/1.1″404 2601
Не найден: /app/components/register/register.component.html
Комментарии:
1. Это много полезной информации, которую затем можно использовать с помощью «не работает» .
Ответ №1:
Это решаемая проблема:
templateUrl: 'static/app/app.component.html'
Ответ №2:
Я не уверен, с какой ошибкой вы столкнулись, но вам, вероятно, следует использовать static
тег для создания URL-адреса статического ресурса в вашем шаблоне:
{% load static %}
templateUrl: "{% static '/app/app.component.html' %}"
Документ:https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#std:templatetag-static