当我只有一个域时,我在哪里设置我的Django Sites框架网站的域名?

时间:2012-09-05 20:20:02

标签: django django-sites

我正在建立一个简单的博客/论坛网站的Django项目。

我正在使用syndication feed framework,它似乎使用the Sites framework中当前网站的域生成Feed中商品的网址。

我以前没有意识到Sites框架。我的项目不会用于多个站点,只有一个。

我想要做的是设置当前站点的domain属性。在我的Django项目中,我应该这样做吗?在/settings.py中的某个地方?

5 个答案:

答案 0 :(得分:23)

如果我理解正确,站点框架数据存储在数据库中,所以如果我想永久存储它,我想它适用于initial_data fixture

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

答案 1 :(得分:8)

其他答案建议手动更新admin,shell或您的数据库中的站点。这是一个坏主意 - 它应该是自动的。

您可以创建一个迁移,该迁移会在您运行迁移时自动执行此操作,因此您可以放心,它始终应用(例如,当您部署到生产时)。 This is also recommended in the documentation,但它没有列出说明。

首先,运行./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以应用更改:)

答案 2 :(得分:3)

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

答案 3 :(得分:3)

对于那些努力在Django管理页面上找到“站点”部分的人,对于较新的Django版本,您需要启用可选的 Sites框架,如下所示:

在您的 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

答案 4 :(得分:2)

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

转到127.0.0.1:8000/admin/sites/