24

我有一个 Django 项目,用于我正在构建的一个简单的博客/论坛网站。

我正在使用联合提要框架,它似乎使用来自站点框架的当前站点的域为提要中的项目生成 URL 。

我以前不知道站点框架。我的项目不会用于多个站点,只会用于一个。

我想要做的是设置domain当前站点的属性。我应该在我的 Django 项目中的哪个位置执行此操作?/settings.py 中的某个地方?

4

5 回答 5

31

如果我理解正确,Sites 框架数据存储在数据库中,所以如果我想永久存储它,我想它适合在一个initial_datafixture 中

我启动了 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固定装置中。

于 2012-09-05T20:28:10.627 回答
18

其他答案建议在管理员、shell 或数据库中手动更新站点。这是个坏主意——它应该是自动的。

您可以创建一个在您运行迁移时自动执行此操作的迁移,因此您可以确保它始终被应用(例如当您部署到生产时)。文档中也建议这样做,但它没有列出说明。

首先,运行./manage.py makemigrations --empty --name UPDATE_SITE_NAME 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,
        defaults={'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中进行设置。然后运行./manage.py migrate以应用更改:)

于 2018-03-05T10:42:54.180 回答
7

您可以使用 django 管理站点更改它。

只是去127.0.0.1:8000/admin/sites/

于 2018-02-04T22:17:45.063 回答
4

您可以手动修改数据库中的站点条目。导航到名为“ django_site ”的表。然后,您应该只看到一个条目(行)。您需要修改名为“”的字段(列)。

于 2012-09-06T11:43:21.247 回答
4

对于那些在 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

于 2020-03-02T12:13:46.717 回答