2017-08-04 10 views
0

バックエンドにAngular 4フロントエンドとPython Djangoを使用します。 私は詳細ボタンをクリックすると、私は私のコンポーネントDjangoでhttpリクエストを無視またはリダイレクトする方法はありますか?

openDetail(id:number){ 
    this.router.navigate(['/motor/detail', {"id": id}]) 
    } 

openDetail方法を実行するブラウザがURL http://localhost:8000/motor/detail;id=21で詳細コンポーネントを開きます。完璧。重要なのは、自分の詳細コンポーネントでIDを操作するだけです。

しかし、ページを更新すると、404エラーが発生します。 - >The current path, motor/detail;id=21, didn't match any of these.まあ、これも明確で、バックエンドに飛び込んだ。

メイン - urls.py

#... some other urls... 
url(r'^motor/', include('motorControll.urls')), 

モータ - urls.py

url(r'^$', views.index, name="index"), 
url(r'^overview/$', views.MotorMapping.as_view({'get': 'getAllData'})), 
url(r'^detail/$', views.index, name="index"), 
url(r'^detail/(?P<id>\d+)/$', views.MotorMapping.as_view({'get': 'getById'})), 
url(r'^detail/save/$', views.MotorMapping.as_view({'post': 'save'})), 

は、どのように私はこの呼び出しを無視するか、インデックスページへのリダイレクトを実行できますか? 次のステップは、詳細ページをロードした後に、このURLで詳細をロードするためです。http://localhost:8000/motor/detail/21、すべてのデータを含むJSONを返します。

+0

なぜあなたのURLに ';'があるのですか?それはタイプミスですか?実際には –

+0

ではありません。それは角チュートリアルのものですhttps://angular.io/guide/router#heroes-list-optionally-selecting-a-hero私はコンテンツが正しいことを理解したいと思っています:) - >スクロールを少し下に、それは青いボックス 'Matrix URL notation' –

+1

行列URL表記の代わりにクエリパラメータを使用することをお勧めします。それは本当に安静のための標準ですまた、角度以外で使用することは容易になります –

答えて

0

motors.urlsのURLマッピングは、URL /motor/detail/21に対して正しく設定されています。しかし、/motor/detail;id=21のようなURLでは設定されていません。

/motor/detail;id=21が動作するようにmotors.urlに別のルートを追加した場合、url(r'^detail;id=(?P<id>\d+)$', views.MotorMapping.as_view({'get': 'getById'})),のようなURLは生のJSONを返すので、それはあなたが望むものではありません。

代わりに、実際のソリューションはより複雑です.URLをDjangoではなく、単一のページアプリケーションにルーティングし、AngularがDjango Rest Frameworkからデータをロードするようにします。

関連する問題