56

私はSitesDjangoのモデルで作業しようとしています。

である必要がある理由がよくわかりSITE_IDませんSITE_ID = 1

ドキュメントで:

django_site データベース テーブル内の現在のサイトの整数としての ID。これは、アプリケーション データを特定のサイトにフックし、1 つのデータベースで複数のサイトのコンテンツを管理できるようにするために使用されます。

なぜ1?は何current siteですか?これはドキュメントでは明確に説明されていません。

たとえば、私は、とwww.coolsite.comのような他のいくつかのサブドメインを持っていますwww.wow.coolsite.comwww.awesome.coolsite.com

ドメイン名に応じて異なるコンテンツをレンダリングしたい。

私の質問は次のとおりです。

  1. これらすべてのドメインをSitesDB のテーブルに追加する必要がありますか?
  2. もしそうなら、設定でどのように設定すればよいSITE_IDですか?SITE_ID = 1などのすべての ID を設定する必要がありSITE_ID = 2ますか?
  3. と何current siteの関係があるのSITE_ID = 1?

ここで少し混乱しています。

各サイト (例www.wow.coolsite.com) は、独自の settings.py を持つことができるように、個別の django プロジェクトにする必要があると思いましたか? これらの settings.py のそれぞれで、Sites テーブルからそのページの ID を設定しますか? しかし、私には意味をなさない多くのdjangoプロジェクトがあります。

4

5 に答える 5

19

Django のデフォルトの SiteAdmin にフィールドに id フィールドが含まれていれば、はるかに理解しやすくなりlist_displayます。

これを行うには、次のように SiteAdmin を再定義します (アプリ内の任意の場所ですが、admin.py または urls.py をお勧めします)。

from django.contrib import admin
from django.contrib.sites.models import Site

admin.site.unregister(Site)
class SiteAdmin(admin.ModelAdmin):
    fields = ('id', 'name', 'domain')
    readonly_fields = ('id',)
    list_display = ('id', 'name', 'domain')
    list_display_links = ('name',)
    search_fields = ('name', 'domain')
admin.site.register(Site, SiteAdmin)

このコード スニペットを含めると、各「サイト」の ID が管理者リストの最初の列とフォーム内に読み取り専用フィールドとして表示されます。これらの「id」フィールドは、SITE_ID として使用する必要があるものです。

サイト レコードの ID を表示する変更された管理ページ

概念は、それぞれの異なるサイトが異なるアプリケーション サーバー インスタンスで実行され、異なる yourdomain_settings.py を使用して起動され、残りの共通構成と共に base_settings.py が含まれるというものです。

これらの yourdomain_settings.py のそれぞれは、独自の SITE_ID と、他のすべての異なる settings.py パラメーターを定義し、それらが互いに異なっている必要があります (静的リソース、テンプレートなど)。次に、DJANGO_SETTINGS_MODULE 環境変数を定義します。そのドメインのアプリケーション サーバー インスタンスを起動するときに、その特定の yourdomain_settings.py ファイル。

追加の注意:それget_current_site(request)が機能するためには、利用可能である必要requestがあります。コードに SITE_ID がない場合は、それを使用できますがSite.objects.get_current()、実行中のアプリケーション サーバーの設定で適切に定義された SITE_ID が必要です。

于 2018-01-06T05:45:25.727 に答える
1

このリンクはそれを説明しています:

追加するドメインごとに個別の設定ファイルを作成する必要があります。それぞれに独自の MEDIA_URL とその他の設定が必要です。また、さまざまなサイトを管理するためにすべてが適切に機能することを確認するために、次の 2 つのことを行う必要があります。

各ドメインの管理者に新しいサイト オブジェクトを作成し、そのサイトの ID を SITE_ID として設定ファイルに入力して、データベース内のどのサイトがこの設定ファイルに対応するかを Django が認識できるようにします。

元のサイト (ID 1 のサイト) の設定ファイルで、他のサイトの設定ファイルを ADMIN_FOR 設定に追加して、管理アプリケーションのこの 1 つのインスタンスがすべてのサイトを処理することを Django に知らせます。

また、モデルを変更してビューを設定する方法を知りたい場合は、次のリンクをご覧ください: https://django.cowhite.com/blog/managing-multiple-websites-with-a-common-database- in-django-the-sites-framework/

于 2019-01-25T23:13:14.223 に答える