gpt4 book ai didi

django - 多个 django 项目在同一个 url

转载 作者:行者123 更新时间:2023-12-04 06:22:00 24 4
gpt4 key购买 nike

我想让多个 django 项目像这样生活在同一个根 url 中:

example.com/ # controlled by home django project  
example.com/project-2 # controlled by a separate django project
example.com/project-3 # controlled by yet another django project

我已经将 LOGIN_REDIRECT_URL 等重新定义为 suggested by this excellent answer ,但我发现了另一个障碍。我实际上在位于 example.com/project-2 和 example.com/project-3 的项目中使用相同的应用程序,这会导致链接到 django 项目内部的内容时出现一些重大问题,这些问题迄今为止一直存在用看似hacky的解决方案解决了。

例如,您永远不能在 example.com/project-2 或 example.com/project-3 中的任何模板中引用“/”以返回托管在这些 URL 中的任何一个的 django 项目的根目录 --- 这将链接到 example.com 上的 home django 项目。为了解决这个问题,我制作了一个上下文处理器,它根据自定义 settings.py 变量 SCRIPT_NAME: '' (for example.com), '/project-2' (for example.com/project-2) 或“/project-3”(例如.com/project-3)。这一切都很好,只是您需要在 get_absolute_url 函数中做同样的事情。在我知道之前,我刚刚将一堆非常可重用的代码(由我以外的人)变成了根本不可重用的代码。

有没有一种方法可以实现相同的效果,而不必在 SCRIPT_NAME 前面添加绝对 URL?也许 apache 或 mod_wsgi 配置很聪明?我不知所措,希望有人可以帮助...

编辑:

我的 example.com 的 apache 配置如下所示:
# redirect un-'/'-terminated urls to the '/'-terminated root urls
RewriteEngine On
RewriteRule /project-2$ /project-2/ [R=302,L]
RewriteRule /project-3$ /project-3/ [R=302,L]

# mod wsgi setup
WSGIScriptAlias /project-2 /srv/project2/project-2.wsgi
WSGIScriptAlias /project-3 /srv/project3/project-3.wsgi
WSGIScriptAlias / /srv/project1/project-1.wsgi

最佳答案

您没有展示您如何从 Apache 配置中为这些项目提供服务,这会很有用。但是如果你将它们定义为单独的 WSGIScriptAlias指令,然后 SCRIPT_NAME会自动为您传递,Django 在反转和创建 URL 时会考虑它。

WSGIScriptAlias /project-2 /srv/project2/project2.wsgi
WSGIScriptAlias /project-3 /srv/project3/project3.wsgi
WSGIScriptAlias / /srv/project1/project1.wsgi

关于django - 多个 django 项目在同一个 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6438432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com