Где я могу установить домен для моего сайта Django Sites Framework, когда у меня есть только один?

У меня есть проект Django для простого веб-сайта блога / форума, который я создаю.

Я использую фид синдикации, который, кажется, генерирует URL для элементов в фиде, используя домен текущего сайта из фреймворка Сайты.

Ранее я не знал о структуре сайтов. Мой проект не будет использоваться для нескольких сайтов, только один.

Что я хочу сделать, это установить domain свойство текущего сайта. Где в моем проекте Django я должен это сделать? Где-нибудь в /settings.py?

4 ответа

Решение

Если я правильно понимаю, данные Sites Framework хранятся в базе данных, поэтому, если я хочу сохранить это постоянно, я думаю, что это уместно в initial_data крепеж

Я запустил оболочку Django и сделал следующее:

>>> 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 крепление.

Другие ответы предлагают вручную обновить сайт в админке, оболочке или вашей БД. Это плохая идея - она ​​должна быть автоматической.

Вы можете создать миграцию, которая будет делать это автоматически при запуске миграций, поэтому вы можете быть уверены, что она всегда применяется (например, при развертывании в рабочей среде). Это также рекомендуется в документации, но не содержит инструкций.

Первый забег ./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.

Просто иди в 127.0.0.1:8000/admin/sites/

Для тех, кто изо всех сил пытается найти раздел "Сайты" на странице администратора Django, для более новых версий Django вам необходимо включить дополнительную платформу сайтов, например:

В файле settings.py добавьте это в "INSTALLED_APPS":

'django.contrib.sites'

Затем укажите идентификатор для сайта по умолчанию (поскольку это, вероятно, ваш первый сайт, который будет указан, вы можете использовать идентификатор 1):

SITE_ID = 1

Запустите миграцию и проверьте, доступен ли раздел "Сайты" на странице администратора Django.

Более подробная информация на https://docs.djangoproject.com/en/3.0/ref/contrib/sites/.

Вы можете изменить запись сайта в вашей базе данных вручную. Перейдите к таблице с именем "django_site". Затем вы должны увидеть только одну запись (строку). Вы хотите изменить поле (столбец) с именем "домен".

Другие вопросы по тегам