如何在本地测试Django的Sites Framework

时间:2010-02-08 17:58:49

标签: django django-sites

Django拥有sites framework来支持单个Django安装的多个网站托管。

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


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


EndEdit中

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

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

3 个答案:

答案 0 :(得分:18)

为每个网站创建单独的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/下的第二个网站

答案 1 :(得分:3)

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

  

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

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

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

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

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

答案 2 :(得分:0)

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