【问题标题】:Is it possible to use the Django Sites Framework with multiple Sites on the same instance?是否可以在同一个实例上使用具有多个站点的 Django 站点框架?
【发布时间】:2017-06-15 13:07:11
【问题描述】:

我已将多个站点定义为站点框架建议的文档。

我知道,如果我要运行我的应用程序的多个实例,每个实例都有不同的设置文件(不同的 SITE_ID),Django 将始终知道要使用哪个站点。

我试图做的是运行一个实例,其中有多个站点可用,并且应该根据站点的当前 url 选择正确的站点。

网站documentation 声明:

SITE_ID 设置指定站点对象的数据库 ID 与该特定设置文件相关联。如果设置是 省略时,get_current_site() 函数将尝试通过将域与主机名进行比较来获取当前站点 request.get_host() 方法。

所以我试图从我的 settings.py 中删除 SITE_ID,并希望 Django 会检查域以找到当前站点,如上所述,但是这失败了,并出现以下异常:

You're using the Django "sites framework" without having set the SITE_ID setting. Create a site in your database and set the SITE_ID setting or pass a request to Site.objects.get_current() to fix this error.

因此,尽管文档另有建议,但此设置似乎不可省略

我知道,当没有可用于查找当前站点的请求对象时,像这样使用站点框架会导致问题,但这在我的应用程序上下文中应该不是问题。

是否可以通过仅检查应用程序的当前域来使用站点框架而无需在设置文件中硬编码 SITE_ID?

我将 Django 版本 1.9.9 与 Python 3.4.3 一起使用

【问题讨论】:

    标签: python django django-sites


    【解决方案1】:

    最好的解决方案是简单地添加Sites framework middleware:

    'django.contrib.sites.middleware.CurrentSiteMiddleware'
    

    这会在每个请求上自动将请求对象传递给 Site.objects.get_current()。

    【讨论】:

      【解决方案2】:

      要“检查当前域”,您需要有一个请求 - 正如错误消息中明确提到的那样:

      或将请求传递给 Site.objects.get_current()

      否则代码如何知道“当前域”?

      【讨论】:

      • 是的,当我发布问题时我才意识到谢谢!
      • @matyas 这没有回答问题 - 这是否可能,如果可以,您需要做什么才能使其正常工作?
      • @YPCrumble 是的,这是可能的。如果您没有在设置中定义 site_id,则需要有一个 requestcontext 以便站点框架知道当前站点是什么。 documentation of the get_current_site shortcutdocs.djangoproject.com/en/1.11/ref/contrib/sites/… .此请求必须传递给 get_current_site 函数 get_current_site(request) 这将为您提供当前站点
      猜你喜欢
      • 2012-05-18
      • 1970-01-01
      • 2011-04-14
      • 2012-09-15
      • 1970-01-01
      • 2019-04-02
      • 2013-05-22
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多