для чего нужны настройки SITE_ID в django?

#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. Это используется для того, чтобы данные приложения могли подключаться к определенным сайтам, а одна база данных могла управлять контентом для нескольких сайтов.