2016-05-13 6 views
0

Ich habe eine Django-Anwendung mit einem AngularJS-Frontend. Die Anwendung sendet Benachrichtigungs-E-Mails, die mithilfe von Django-Vorlagen gerendert werden.Wie kann ich eine AngularJS-Route von einer Django-Vorlage umkehren?

ITEM: {{article.title}} 
DATE: {{article.date}} 
SOURCE: {{article.link}} 

{{article.body}} 

Das Problem ist article.link. In der vorherigen Version der Anwendung wurde kein Angular verwendet. Daher war es einfach, den Link zu finden. In urls.py hatten wir

url(r'article/(?P<article>\d+)/$', views.ArticleView.as_view(), name='show-article') 

was bedeutete, dass wir eine URL zu einem bestimmten Artikel mit

django.core.urlresolvers.reverse('show-article', kwargs={'article':article_id}) 

nun auf dem winkelbasierten Revamp der Website, die Anzeige-URL für einen Artikel Aussehen umkehren könnten wie /mysite/#/article/1234 und wird von routes.js bestimmt:

$routeProvider.when('/article/:articleId', { ... }) 

Unterm Strich, ich habe keine Möglichkeit, eine AngularJS Route von Python zu greifen. Ich könnte die ganzen Routen von routes.js in etwas kodieren, das das Backend sieht, aber es würde nicht sehr TROCKEN sein. Ich könnte routes.js dynamisch mit Django erzeugen, aber im Moment ist keiner unserer anderen JS Quellen von Django berührt - das scheint auch nicht sehr sauber zu sein. Vielleicht sollte ich weiterhin die alten URLs (/article/1234) als Umleitung zu den angular-style URLs (/#/article/1234) unterstützen? Das erfordert immer noch logische Duplizierung, denke ich.

Gibt es ein besseres Muster, das ich hier verwenden sollte?

Antwort

0

Das Entkoppeln von Clients und Servern ist oft ein Ziel, daher sollte die Duplizierung in diesem Fall nicht als schlecht angesehen werden. Je nach Ihren Bedürfnissen gibt es jedoch Lösungen, die eine umgekehrte Methode bieten, die sich wie in Django verhält. Es gibt django-js-reverse und django-angular für angular specificaly.

+0

Bitte denken Sie daran, ich versuche nicht, eine Django URL in Angular umzukehren (Ich habe eine Frage hierüber gefunden, aber ich habe den Tab verloren :(), ich versuche eine Angular Route in Django umzukehren. ' "django-js-reverse" ist für den umgekehrten Weg. Das gleiche gilt für die Seite "django-angular", die Sie verlinkt haben. Ich möchte Front-End-Routen vom Server finden, keine Back-End-URLs vom Client. – Coderer

Verwandte Themen