【发布时间】:2019-09-28 19:05:05
【问题描述】:
我有我的 Django 应用程序,我有以下用例:
- 本地开发。由于我的应用程序大多很简单,我更喜欢通常的
manage.py runserver方法。因此,我希望我的应用适用于这种情况。 - 生产环境。我们在不同的 URL 下拥有一个 Web 服务器和主机工具,例如
https://myserver.com/tool1、https://myserver.com/tool2等。所以我想把我的应用程序放在这个结构中 - (理论上)除了用例 2,我可能希望将应用程序托管在自己的域下,例如
https://tool.myserver.com
但是当我尝试这样做时,我遇到了静态文件的问题(叹气!),因为如果我有 STATIC_URL 作为相对路径 STATIC_URL='static/' 那么它不适用于“嵌套”页面(即,如果我在 myserver.com/tool1/page 然后静态 URL 将映射到 myserver.com/tool1/page/static 这是不正确的)。
另一方面,如果我使用绝对路径 STATIC_URL='/static/' 那么它根本不适用于案例 2,因为 Django 应用程序对它所在的 URL 的 /tool1 部分一无所知。
我可以为STATIC_URL 使用两种不同的变体,具体取决于环境和硬编码STATIC_URL='/tool1/static/',但是相同的代码不适用于案例3...
我应该如何处理这种情况?
更新
实际上,我意识到这更像是一般的 nginx+后端问题,而不是 Django 问题。因为在一天结束时后端生成的网页很可能会有src="/static/...."(除非我在后端添加一些黑客以插入前缀/tool1)。我想知道它通常是如何处理的?有一种方法可以替换nginx中的实际HTML内容,但是确实会影响性能...
UPD2
似乎很多人误读了我的问题,认为唯一的问题在于静态文件。然而这只是一个例子,因为正如 Ivan 正确提到的,链接也存在同样的问题。通常在页面上我有a href="/category/post?id=1" 之类的链接。显然,当站点以my.domain/tool1 打开时,这将解析为my.domain/category...,这是错误的(我希望它指向my.domain/tool1/category...。)
【问题讨论】:
-
你是如何解决所有其他页面/网址的?
-
@Ivan,你什么意思?
-
您的网络应用程序中有超链接吗?你如何从另一个页面引用一个页面?
-
由于我的应用程序很简单,我并没有真正的多级分层链接,我有一个对同一页面的请求(如
href="#"工作正常)。但是,是的,你是对的,同样的问题我也会有链接,不仅仅是静态 -
STATIC_URL='static/' 设置在哪里?你能显示你的配置文件或相关部分吗?
标签: python django nginx url-rewriting