Ответ 1
Вопрос не очень специфичен для Django - просто вопрос понимания отношений между back-end и front-end в SPA.
Маршруты не дублируются между внутренним и внешним интерфейсами. Ваши маршруты Django должны быть настроены так:
/api/foo
/api/bar
...
и один единственный маршрут, который предоставляет одну страницу с полными частицами HTML, например.
/
Остальные маршруты будут определены в Angular, например.
/articles/234
/blog/date/slug
...
Контроллеры Angular, которые обрабатывают эти общедоступные маршруты, в свою очередь делают вызовы $http против URL-адресов API, и каждый из них будет доставлять один Angular частично. Таким образом, нет дублирования, нет дублирования.
Во вторую часть вашего вопроса вы можете использовать отношения модели Django ORM при построении данных API, но да, вы потеряете всю эту доброту Django при создании front-end.
Если вы создадите свой API правильно, все данные, которые вам нужны в каждом представлении, будут полностью присутствовать в канале JSON, который Angular потребляет в этом представлении. Таким образом, вы используете ORM для создания данных на заднем плане, но вы не можете просто решить пересечь модельные отношения в шаблоне без предварительной подготовки исходных данных для предоставления данных для него.
Да, это совсем другой способ думать о вещах, и да, это немного сложнее, чем прямое Django (или Rails). Это стоимость создания веб-приложения, а не веб-сайта.