【问题标题】:Apache | Django: How to run websites on the back of a base URL?阿帕奇 | Django:如何在基本 URL 的后面运行网站?
【发布时间】:2010-12-15 07:05:55
【问题描述】:

我有一个基本网址。 http://baseurl.com/ 我正在尝试在它的背面运行项目。例如 http://baseurl.com/mongoose/ 项目运行,但 URL 无法正常工作,因为它们都 参考基本网址。所以对于“关于我”页面,它指向 http://baseurl.com/about 而不是 http://baseurl.com/mongoose/about

这是我需要在 django 或 apache 中更改的内容吗?我就是这样 尝试做甚至可能?

来自 IIS .net 背景,我知道在 IIS 中,您可以在站点内“创建和应用程序”,这基本上可以实现我现在使用 Apache 和 Django 实现的目标。

谢谢

【问题讨论】:

    标签: django apache hosting web-hosting


    【解决方案1】:

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

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

    更新

    所以您的问题在于获取 Flatpages 的 URL。问题是动态计算 URL 的正常方法,因此它们确实考虑了 SCRIPT_NAME - 使用 reverse() 函数或 {% url %} 标记 - 不适用于 Flatpages,因为它们不是通过 url 分派的.py 但通过自定义中间件触发 404。

    因此,我将使用 urls.py 机制来分派到平面页面,而不是使用该中间件。从你的 settings.py 中删除 flatpagemiddleware,并在 urls.py 在你的模式的末尾添加这个:

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

    现在,在您的模板中,您可以:

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

    它应该可以正常工作。

    【讨论】:

    • add 通过添加答案来响应。在回复您的回答时,我们不乐意发布代码。
    【解决方案2】:

    检查项目中的任何urls.py 以查看他们是否期望成为顶级。但是如果应用程序输出像/something 这样的链接,那么它就意味着根目录。应用程序应该将视图/参数反转为 URL,这将允许您移动它。如果您编写了应用程序,请查看reverse 中的django.core.urlresolvers

    【讨论】:

    • 我正在使用 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',所以我没有在我的 urls.py 中捕获平面页面 url
    猜你喜欢
    • 2013-02-03
    • 2012-05-26
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多