Apache | Django: 如何在基础URL的后面运行网站?

3
我有一个基本的URL:http://baseurl.com/,我想在其后运行项目,例如http://baseurl.com/mongoose/。项目可以运行,但URL不能正常工作,因为它们都引用了基本URL。所以对于“关于我”页面,它指向http://baseurl.com/about而不是http://baseurl.com/mongoose/about
这是我需要在Django或Apache中更改的内容吗?我正在尝试实现的东西是否可能?
从IIS .net背景出发,我知道在IIS中,您可以在站点内“创建应用程序”,这本质上就是我现在在Apache和Django中尝试实现的内容。
谢谢
2个回答

1

您不需要做任何事情。Apache 应该设置一个名为 SCRIPT_NAME 的请求头,它是您的基本 URL,所有 URL 反转都会考虑到这一点。

您在模板中如何创建这些 URL?

更新

所以您的问题是如何获取 Flatpages 的 URL。问题在于通常动态计算 URL 的方式,使其考虑到 SCRIPT_NAME - 使用 reverse() 函数或 {% url %} 标签 - 在 Flatpages 上不起作用,因为它们不是通过 urls.py 而是通过自定义中间件分发的 404。

因此,我建议使用 urls.py 机制来分发 flatpages,而不是使用那个中间件。从您的 settings.py 中删除 flatpagemiddleware,在 urls.py 中在您的 patterns 结尾处添加以下内容:

url(r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage', name='flatpage'), 

现在,在您的模板中,您可以这样做:

<a href="{% url flatpage page.url %}">

而且它应该正常工作。


代码不喜欢被发布在回答中,因此请添加一个答案。 - darren

0

检查项目中的任何 urls.py 文件,看它们是否期望处于顶层位置。但如果应用程序输出类似 /something 的链接,则意味着根目录。应用程序应该将视图/参数反向成URL,并允许您移动它。如果您编写了这些应用程序,请查看 django.core.urlresolvers 中的 reverse


我正在使用'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',所以我没有在我的urls.py中捕获flatpage的URL。 - darren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接