Django拥有sites framework来支持单个Django安装的多个网站托管。
编辑(以下是对系统的错误假设)
我了解中间件根据请求域的查找/缓存设置settings.SITE_ID值。
EndEdit中
但在本地测试时,我在http://127.0.0.1:8000/,而不是http://my-actual-domain.com/
如何在开发过程中在本地查看我的不同网站?
答案 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