同一域下的多个Django应用程序

时间:2013-05-18 09:10:29

标签: django apache mod-wsgi

我正在尝试在同一域下的子目录中本地设置两个Django应用程序,例如:

http://127.0.0.1/en/
http://127.0.0.1/jp/ 

以下是/etc/apache2/apache2.conf

的摘录
WSGIDaemonProcess khdx_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /khdx /home/galdosd/khdxweb/rel/khdx/apache/django.wsgi
<Location /khdx>
    WSGIProcessGroup khdx_wsgi
</Location>

WSGIDaemonProcess sauron_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /sauron /home/galdosd/finalsauronweb/django-root/apache/django.wsgi
<Location /sauron>
    WSGIProcessGroup sauron_wsgi
</Location>

我面临的问题是所有网址都相对于127.0.0.1工作,例如127.0.0.1/accounts127.0.0.1/login代替127.0.0.1/en/accounts127.0.0.1/en/login

最初,当我只有一个运行在127.0.0.1的Django应用程序时,所有事情都运行良好,因为我的WSGIScriptAlias指向/而不是/en或{{1} }。

提前致谢:)

2 个答案:

答案 0 :(得分:2)

如果您希望应用显示为:

http://127.0.0.1/en/
http://127.0.0.1/jp/

然后你应该使用:

WSGIDaemonProcess khdx_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /en /home/galdosd/khdxweb/rel/khdx/apache/django.wsgi
<Location /en>
    WSGIProcessGroup khdx_wsgi
</Location>

WSGIDaemonProcess sauron_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /jp /home/galdosd/finalsauronweb/django-root/apache/django.wsgi
<Location /jp>
    WSGIProcessGroup sauron_wsgi
</Location>

不知道/ khdx和/ sauron的子URL挂载点来自哪里,但它不会产生你想要的结果。

我实际上会将上述内容进一步简化为:

WSGIDaemonProcess khdx_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /en /home/galdosd/khdxweb/rel/khdx/apache/django.wsgi process-group=khdx_wsgi application-group=%{GLOBAL}

WSGIDaemonProcess sauron_wsgi user=galdosd group=galdosd maximum-requests=10000
WSGIScriptAlias /jp /home/galdosd/finalsauronweb/django-root/apache/django.wsgi process-group=sauron_wsgi application-group=%{GLOBAL}

请确保您使用的是mod_wsgi 3.0或更高版本而不是某些古老的2.X版本。

还要确保在代码中使用正确的模板宏和代码函数来正确计算URL时需要在响应中填写它们,否则它们可能会丢失挂载点。

还使用适当的方法将Django版本用于填写登录/注销URL中的挂载点。较旧的Django版本要求您在设置文件中明确地将en和jp作为登录/注销URL设置的一部分。这些天你可以使用一些神奇的功能,它们会自动为它们添加挂载点,这样你就不会在设置中的登录/注销URL路径中嵌入挂载点的知识。

因此,请使用该配置,如果仍有问题,请根据该配置重新提出问题。

答案 1 :(得分:1)

这里不需要单独的申请。您可以使用language prefix in Django URLs以所需的方式实现基于语言的视图。