我有一个Django项目,我正在建立一个简单的博客/论坛网站。
我正在使用syndication feed framework,它似乎使用the Sites framework当前站点的域生成feed中项目的URL。
我以前没有意识到Sites框架。我的项目不会用于多个站点,只有一个。
我想要做的是设置当前站点的domain
属性。在我的Django项目中,我应该这样做吗?在/settings.py的某个地方?
如果我理解正确,站点框架数据存储在数据库中,所以如果我想永久存储它,我想它在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
夹具中。
其他答案建议手动更新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
来应用更改:)
您可以手动修改数据库中的“站点”条目。导航到名为“django_site”的表。然后,您应该只看到一个条目(行)。您需要修改名为“domain”的字段(列)。
您可以使用django管理站点进行更改。
去127.0.0.1:8000/admin/sites/
吧