2010-02-08 47 views
9

Django的sites framework支持单个Django安装的多个网站托管。如何在本地测试Django的Sites框架

EDIT(下面是该系统的一个不正确的假设)


据我所知,中间件设置基于请求域的查找/缓存settings.SITE_ID值。


EndEdit中

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

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

+0

链接现已过期 - 我今天拥有的设施来解决这个问题发布的Django dynamicsites。请修复它。 – 2017-01-23 10:30:09

回答

17

为每个站点创建一个单独的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/

3
下的第二个

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

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

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

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

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

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

+0

谢谢格雷戈尔。我怀疑我很迷惑。我可能会创建中间件来完成Django已经在做的事情,并且当请求的域位于settings.DEVELOPMENT_SERVERS时,它会查找查询字符串属性“site = my-site-1.com”,如果请求为: 。settings.DEVELOPMENT_SERVERS中的.META ['SERVER_NAME']: #查找并在会话中设置网站 – 2010-02-09 02:18:46