web-dev-qa-db-ja.com

Djangoサイトフレームワークサイトが1つしかない場合、どこにドメインを設定しますか?

構築しているシンプルなブログ/フォーラムのウェブサイト用のDjangoプロジェクトがあります。

シンジケーションフィードフレームワーク を使用しています。これは、 サイトフレームワーク から現在のサイトのドメインを使用してフィード内のアイテムのURLを生成しているようです。

私は以前、サイトフレームワークに気づいていませんでした。私のプロジェクトは複数のサイトで使用されることはなく、1つだけです。

私がやりたいのは、現在のサイトのdomainプロパティを設定することです。私のDjangoプロジェクトのどこでそれを行うべきですか?/settings.pyのどこか?

20
Paul D. Waite

私が正しく理解していれば、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フィクスチャに貼り付けました。

24
Paul D. Waite

他の回答は、管理者、シェル、または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を実行して変更を適用します:)

8
dspacejs

データベースのサイトエントリを手動で変更できます。 'Django_site'というテーブルに移動します。次に、1つのエントリ(行)のみが表示されます。 'domain'という名前のフィールド(列)を変更する必要があります。

3
Kurtis

Django管理サイトを使用して変更できます。

127.0.0.1:8000/admin/sites/に移動するだけです

3
Juano

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

1