【问题标题】:multiple django projects at same url多个 django 项目在同一个 url
【发布时间】:2011-06-22 10:33:36
【问题描述】:

我希望多个 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 函数中做同样的事情。在不知不觉中,我刚刚将一堆非常可重用的代码(由我以外的人)变成了根本不可重用的代码。

有没有一种无需在绝对 URL 前面加上 SCRIPT_NAME 的方法来实现相同的效果?也许 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

【问题讨论】:

    标签: django apache mod-wsgi


    【解决方案1】:

    您没有展示如何从您的 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
    

    【讨论】:

    • 见上面的编辑。我的 apache 设置很像你描述的(+RewriteRules,如果有影响的话)。 Django 在反转和创建 URL 时如何自动考虑到这一点?开箱即用,这对我不起作用...
    • 更正,get_absolute_url 和使用 url 模板标签确实可以开箱即用。问题仅在于硬编码的 URL。感谢您的帮助!
    • 丹尼尔是对的,它应该可以工作。也就是说,您确实需要使用适当的模板标签和其他 Django 函数来构建 URL。在模板中,您应该使用 'url 模板标签。请参阅“docs.djangoproject.com/en/1.3/ref/templates/builtins/#url”。您实际上是在使用该模板标签,还是在不应该使用时将 URL 硬连接到模板中?
    • 我有一些杂项 URL(不幸的是在导航栏中)我没有使用“url”模板标签。糟糕的形式,我知道...感谢您也参与进来,格雷厄姆。
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2013-12-05
    相关资源
    最近更新 更多