【问题标题】:How to locally test Django's Sites Framework如何在本地测试 Django 的站点框架
【发布时间】:2011-01-14 11:42:24
【问题描述】:

Django 具有sites framework 以支持从单个 Django 安装中托管多个网站。

编辑(以下是系统的错误假设)


我了解中间件根据请求域的查找/缓存设置 settings.SITE_ID 值。


结束编辑

但是在本地测试时,我在http://127.0.0.1:8000/,而不是http://my-actual-domain.com/

在开发过程中如何在本地查看我的不同站点?

【问题讨论】:

  • 链接已过期。请修复它。

标签: django django-sites


【解决方案1】:

为每个站点创建一个单独的 settings.py 文件,包括适当的 SITE_ID 设置。当然你可以使用import 语句在文件之间共享通用设置。

从现在开始,当运行 Django 开发服务器时,指定 --settings 选项来告诉 Django 运行哪个站点。

例如(假设您有两个设置文件 - settings_first.py 和 settings_second.py):

manage.py runserver --settings settings_first

将运行第一个站点,并且

manage.py runserver --settings settings_second

将允许您访问第二个站点。

您也可以同时运行它们,指定不同的端口:

manage.py runserver 8001 --settings settings_first

manage.py runserver 8002 --settings settings_second

上述命令(在两个不同的控制台上运行)将使http://127.0.0.1:8001/ 下的第一个网站可以访问,http://127.0.0.1:8002/ 下的第二个网站可以访问

【讨论】:

    【解决方案2】:

    仅供参考 - 我今天发布了 django-dynamicsites,它有解决这个问题的工具 - https://bitbucket.org/uysrc/django-dynamicsites/src

    【讨论】:

    • 链接似乎已损坏
    【解决方案3】:

    也许您被文档误导了。你写道:

    我了解中间件根据请求域的查找/缓存设置 settings.SITE_ID 值。

    事实并非如此。它完全相反。 Django 使用 settings.SITE_ID 值在数据库中查找正确的 Site 对象。这将返回您首选的域名和站点名称。

    sites 应用程序旨在填补(在我看来)罕见的用例,即您希望多个站点在后台使用相同的数据库。这使您可以在不同的网站上发布相同的文章,但仍然具有某些模型仅适用于单个网站的灵活性。

    对于开发多个项目(实际上并未使用站点框架),您不必指定任何特殊内容。您可以使用默认的SITE_ID 设置为1。要使用管理员的网站视图链接,您可以在开发数据库中将Site 的域设置为localhost:8000

    如果您想使用同一个数据库开发多个站点(并使用站点框架),您必须让每个项目具有不同的SITE_ID,但数据库设置相同。在大多数情况下,开发机器上每个项目中SITE_ID 的值与生产服务器的值相同。

    【讨论】:

    • 谢谢格雷戈尔。我怀疑我被误导了。我可能会创建中间件来做我虽然 Django 已经在做的事情,并让它在请求的域位于 settings.DEVELOPMENT_SERVERS 时查找查询字符串属性“site=my-site-1.com”,例如:如果请求。 META['SERVER_NAME'] in settings.DEVELOPMENT_SERVERS: #do lookup and set the site in the session
    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 2010-09-17
    • 2016-02-27
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多