0

アプリに単純なテナンシー サポートを追加しようとしています。リクエスト URL から読み取られる文字列「tenant」を持つアカウント モデルを作成し、システム内のテナントを識別します。

テナント.example.com/* -> www.example.com/テナント/* (apache で書き換え)

この /tenant/ を request.path から取得し、使用する request.account オブジェクトを追加する単純なミドルウェアを作成しました。

私の問題は、URL マッピングです。

私はこれを試しました:

url(r'^(?P<tenant_id>[\w\-]+)/', include('project.urls_tenant')),

urls_tenant.py 内にいくつかの単純な URL を定義しました。

url(r'^app1/', include('project.app1.urls')),

url(r'^app2/', include('project.app2.urls')),

任意のページにアクセスしようとすると、次のエラー メッセージが表示されます。

generic_view_method() が予期しないキーワード引数 'tenant_id' を取得しました

これは、tenant_id をパラメーターとして想定していない (実際にそうすべきではない) ためです。

urls.pyファイルに tenant_id を/ test_tenant/としてハードコーディングすると、すべて正常に動作します。

リクエストとレスポンスが正常に処理されるように、私は何を間違っていて、それを修正するのですか?

どうもありがとうございました。これを参考にしました: django でのマルチテナント アプリケーションの最適なアーキテクチャ

4

2 に答える 2

0

あなたの設定を正しく理解していれば、次のように定義されています。

url(r'^(?P<tenant_id>[\w\-]+)/', include('project.urls_tenant')),

メインの urls.py ファイルと urls_tenant.py ファイルの他の行では?

そこから取得すると、^(?P[\w-]+)/に一致するリクエストはurls_tenant.pyファイルを介して渡されませんか? そこで定義した 2 行は、/app1 または /app2 にのみ一致します。

しかし、私はあなたのセットアップを完全に理解していないと推測していますか?

別の urls.py ファイルを含めるのではなく、テナントの URL を特定のビューにマップした方がよいと思います (これが可能であることさえ知りませんでした)。

url(r'^(?P<tenant_id>[\w\-]+)/', TenantView.as_view(), name="tenant-view"),

上記のようなものは、私にはよりジャンゴに見えます。

于 2012-09-05T06:47:31.837 に答える
0

明らかに必要がないときに、url パターンで名前付きパラメーター tenant_id をキャプチャしています。キャプチャを実行しないように、括弧を削除してみてください。

url(r'^[\w\-]+/', include('project.urls_tenant')),

このページは一般的に読むのに役立ちます: https://docs.djangoproject.com/en/dev/topics/http/urls/#how-django-processes-a-request

于 2012-09-05T09:53:08.577 に答える