私のプロジェクトには、「abc」、「xyz」、「common」という3つのアプリケーションがあります。 Commonは、両方のアプリケーションによって継承され拡張されたテンプレート、モデル、ビューを格納するだけで、実際のアプリではありません。Djangoのアプリケーションが間違った名前空間に解決する
プロジェクトレベルのurls.pyはそうのように見え、かつ適切にそれぞれのアプリに要求をリダイレクトします。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^abc/', include('abc.urls')),
url(r'^xyz/', include('xyz.urls')),
]
は両アプリのurl.pyファイルには、次のようになり、唯一の違いは、XYZとABCのすべてのインスタンスを置き換えます:
再びfrom django.conf.urls import url
from views import ABCAlertList as AlertList
from views import ABCEventList as EventList
from views import ABCEventDetail as EventDetail
from views import ABCEventReplay as EventReplay
from views import ABCUploadView as UploadView
urlpatterns = [
url(r'^$', AlertList.as_view(), name='view_alerts'),
url(r'^entities/(?P<uid>\w+)/$', EventList.as_view(), name='view_uid'),
url(r'^entities/(?P<uid>\w+)/replay/$', EventReplay.as_view(), name='view_replay'),
url(r'^entities/(?P<uid>\w+)/event/(?P<eid>\w+)/$', EventDetail.as_view(), name='view_event'),
url(r'^upload/$', UploadView.as_view(), name='upload_file'),
]
何もアプリ固有のそれらのいずれかにがあるので、すべてのビューは、両方のアプリケーション間で共通しています。どちらのアプリは同じ共通のテンプレートに同じラインを使用します
<a href="{% url 'view_uid' alert.uid %}">
さて、問題:
のApp ABCは、トップレベルのページで正常に動作します。しかし、それが間違ったアプリを指していることを意味するURLをレンダリングしています。
例えば、私は
http://localhost:8888/abc/
になるだろうし、そのページのURLが与え何
http://localhost:8888/xyz/entities/262b3bce18e71c5459a41e1e6d52a946ab47e88f/
としてレンダリングしますか? Djangoが間違ったアプリのurls.pyを読んでいるようです。
両方のurlsファイルに同じ名前がありますか?
request.current_app
属性を設定する必要があります。 ABCアプリでview_uidのようなものをabc_view_uidに変更してみてください。 XYZアプリではxyz_view_uidです。 – xrage/abc /ページのURLは、アプリケーションの他の部分へのリンクを意味しますか?もしそうなら、単なる単純なタイプミスのように聞こえるかもしれません。 ABCとXYZのurls.pyが適切な型であると仮定すると、Djangoが間違ったURLを作成する理由はわかりません。 –