構築しているシンプルなブログ/フォーラムのウェブサイト用のDjangoプロジェクトがあります。
シンジケーションフィードフレームワーク を使用しています。これは、 サイトフレームワーク から現在のサイトのドメインを使用してフィード内のアイテムのURLを生成しているようです。
私は以前、サイトフレームワークに気づいていませんでした。私のプロジェクトは複数のサイトで使用されることはなく、1つだけです。
私がやりたいのは、現在のサイトのdomain
プロパティを設定することです。私のDjangoプロジェクトのどこでそれを行うべきですか?/settings.pyのどこか?
私が正しく理解していれば、Sitesフレームワークデータはデータベースに保存されているので、これを永続的に保存したい場合は、 initial_data
フィクスチャ に適切だと思います。
Django Shellを起動し、次のことを行いました。
>>> from Django.contrib.sites.models import Site
>>> one = Site.objects.all()[0]
>>> one.domain = 'myveryspecialdomain.com'
>>> one.name = 'My Special Site Name'
>>> one.save()
次に、コマンドラインでこのデータだけを取得しました。
python manage.py dumpdata sites
そして、それを私の既存のinitial_data
フィクスチャに貼り付けました。
他の回答は、管理者、シェル、またはDBのサイトを手動で更新することを提案しています。これは悪い考えです。自動化する必要があります。
移行の実行時にこれを自動的に実行する移行を作成できるため、(本番環境にデプロイするときなど)常に適用されることが保証されます。 これはドキュメントでも推奨されています ですが、手順は記載されていません。
まず、./manage.py makemigrations --empty myapp
を実行して、空の移行を作成します。次に、次のコードを追加します。
from Django.db import migrations
from Django.conf import settings
def update_site_name(apps, schema_editor):
SiteModel = apps.get_model('sites', 'Site')
domain = 'mydomain.com'
SiteModel.objects.update_or_create(
pk=settings.SITE_ID,
domain=domain,
name=domain
)
class Migration(migrations.Migration):
dependencies = [
# Make sure the dependency that was here by default is also included here
('sites', '0002_alter_domain_unique'), # Required to reference `sites` in `apps.get_model()`
]
operations = [
migrations.RunPython(update_site_name),
]
設定でSITE_ID
を設定していることを確認し、ファイルの名前をupdate_site_details.py
などの適切な名前に変更してください。次に、./manage.py migrate
を実行して変更を適用します:)
データベースのサイトエントリを手動で変更できます。 'Django_site'というテーブルに移動します。次に、1つのエントリ(行)のみが表示されます。 'domain'という名前のフィールド(列)を変更する必要があります。
Django管理サイトを使用して変更できます。
127.0.0.1:8000/admin/sites/
に移動するだけです
Djangoの管理ページで「サイト」セクションを見つけるのに苦労している人のために、新しいDjangoバージョンでは、オプションのサイトフレームワークそのように:
settings.pyファイルで、これを「INSTALLED_APPS」に追加します。
'Django.contrib.sites'
次に、デフォルトサイトのIDを指定します(おそらく最初に指定するサイトなので、ID 1を使用できます)。
SITE_ID = 1
移行を実行し、Djangoの管理ページで[サイト]セクションが利用可能かどうかを確認します。
詳細については https://docs.djangoproject.com/en/3.0/ref/contrib/sites/#enabling-the-sites-framework