Django 中 SITE_ID 设置有什么用途?

9
当我在完成flatpage教程时,出现了“未设置SITE_ID”的错误。在settings文件中插入SITE_ID=1后,一切正常。但是我不知道这实际上意味着什么。
我阅读了django文档,但我并不完全清楚它的用途。何时才能像SITE_ID=2这样使用呢?
同样的,我在我的代码中使用了下面的片段,但并不知道它做了什么:
current_site=Site.objects.get_current()

我猜这与 SITE_ID 有关,但也许不是。

举个例子说明 SITE_ID 可以取不同于1的值会更有帮助。

2个回答

6

如果你在多个站点使用自己的代码,或者与另一个站点共享数据库,这将非常有帮助。以下是来自文档的示例:

from django.db import models
from django.contrib.sites.models import Site
from django.contrib.sites.managers import CurrentSiteManager

class Photo(models.Model):
    photo = models.FileField(upload_to='/home/photos')
    photographer_name = models.CharField(max_length=100)
    site = models.ForeignKey(Site)
    objects = models.Manager()
    on_site = CurrentSiteManager()

使用这个模型,Photo.objects.all()将返回数据库中所有的照片对象,但是Photo.on_site.all()只会返回与当前站点相关联的照片对象,根据SITE_ID设置。

换句话说,这两个语句是等价的:

Photo.objects.filter(site=settings.SITE_ID)
Photo.on_site.all()

你如何设置 SITE_ID 对应哪个网站。例如,1 对应 example.com2 对应 tutorial.com 等。 - brain storm
@brainstorm 每个站点可能都有自己的 settings.py 文件,其中会进行设置。 - dwitvliet

0

来自文档

SITE_ID 默认值:未定义

当前站点在django_site数据库表中的ID,以整数形式表示。这是为了让应用程序数据钩入特定站点,并且单个数据库可以管理多个站点的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接