我为我的一个模型添加了一个get_absolute_url
功能。
def get_absolute_url(self):
return '/foo/bar'
管理站点选择它并向该对象的详细信息页面添加一个“站点视图”链接(当我在那里放置一个真实的 URL 而不是“/foo/bar”时)。
问题不是去http://localhost:8000/foo/bar
,而是去http://example.com/foo/bar
。
我究竟做错了什么?
我为我的一个模型添加了一个get_absolute_url
功能。
def get_absolute_url(self):
return '/foo/bar'
管理站点选择它并向该对象的详细信息页面添加一个“站点视图”链接(当我在那里放置一个真实的 URL 而不是“/foo/bar”时)。
问题不是去http://localhost:8000/foo/bar
,而是去http://example.com/foo/bar
。
我究竟做错了什么?
您必须更改默认站点域值。
最有趣的是“example.com”出现在一个明显的地方。然而,我在一个小时左右的时间内寻找。
只需使用您的管理界面 -> 站点 -> ... 就是这样 :)
如果您启用了管理员,您可以在 /admin/sites 中更改此设置。
正如其他人所提到的,这与默认sites
框架有关。
如果您使用South进行数据库迁移(通常可能是一个好主意),您可以使用数据迁移来避免在部署应用程序的任何地方都必须进行相同的数据库更改,如下所示
from south.v2 import DataMigration
from django.conf import settings
class Migration(DataMigration):
def forwards(self, orm):
Site = orm['sites.Site']
site = Site.objects.get(id=settings.SITE_ID)
site.domain = 'yoursite.com'
site.name = 'yoursite'
site.save()
如果您使用的是较新版本的 django。数据迁移是这样的:
from django.conf import settings
from django.db import migrations
def change_site_name(apps, schema_editor):
Site = apps.get_model('sites', 'Site')
site = Site.objects.get(id=settings.SITE_ID)
site.domain = 'yourdomain.com'
site.name = 'Your Site'
site.save()
class Migration(migrations.Migration):
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.RunPython(change_site_name),
]
当您编辑了管理员认为的站点实例后,您需要重新启动 Web 服务器以使更改生效。我想这一定意味着只有在 Web 服务器首次启动时才读取数据库。