#django #django-sites
#django #django-сайты
Вопрос:
Когда я выполняю руководство по flatpage, я получал сообщение об ошибке из-за SITE_ID
того, что оно не было установлено. Я вставил SITE_ID=1
файл настроек, и все работало нормально. Но я не знаю, что это на самом деле означает.
Я прочитал django docs
. но я не совсем понимаю, в чем его польза. когда я буду использовать что-то вроде SITE_ID=2.
В той же заметке я использовал следующий фрагмент в своем коде, фактически не зная, что он делает:
current_site=Site.objects.get_current()
Я предполагаю, что это как-то связано с SITE_ID
, но может быть и нет.
Поможет какой-нибудь пример, демонстрирующий, где SITE_ID
могут приниматься значения, отличные от 1.
Ответ №1:
Полезно, если вы используете свой код на нескольких сайтах или если вы делитесь базой данных с другим сайтом. Пример из документации:
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 в базе данных, но Photo.on_site.all()
будут возвращены только объекты Photo, связанные с текущим сайтом, в соответствии с настройкой SITE_ID.
Другими словами, эти два утверждения эквивалентны:
Photo.objects.filter(site=settings.SITE_ID)
Photo.on_site.all()
Комментарии:
1. как вы устанавливаете, какой SITE_ID соответствует какому сайту. например
1
, соответствуетexample.com
,2
соответствуетtutorial.com
и т. Д2. @brainstorm У каждого сайта, вероятно, будет свой собственный
settings.py
, где он будет установлен.
Ответ №2:
SITE_ID по умолчанию: не определен
Идентификатор текущего сайта в виде целого числа в таблице базы данных django_site. Это используется для того, чтобы данные приложения могли подключаться к определенным сайтам, а одна база данных могла управлять контентом для нескольких сайтов.