链接Django Flatpages的正确方法是什么?

时间:2015-06-08 18:01:15

标签: python django apache

我在我的服务器上的子目录中安装了Django 1.8.2。它配置了mod_wsgi.py和Apache2,并且运行正常。

可以在 https://example.com/django 下访问Django应用程序,并且所有内容都已配置并正常运行。

现在我想使用Flatpages并将它们链接到我的模板中。我是这样做的:

<a href="/my-flatpage/">Awesome!</a>

这适用于我本地计算机上的开发服务器。但是当我在服务器上部署它时,点击链接会产生这个网址: https://example.com/my-flatpage/ ,这很自然,因为这是我在a标记中引用它的方式。

但是,无论django是否存储在子目录中,我怎么能正确地做到?我不想对子目录 / django / 进行硬编码,因为这只是一个测试服务器。必须有一个比这更好的解决方案。你能解释一下我,我应该如何在模板中链接我的平板电脑?我认为必须有一种方法可以包含正确的平面路径,无论Django是存储在子目录中还是存储在根目录中。

我尝试在 urls.py 中为他们命名并硬编码链接。但是测试服务器无法生成正确的链接(django提供的本地开发网站服务器了!)我认为将URL写入我的应用程序两次是不是一个很好的解决方案(首先在平面的定义中, urls.py 中的第二个。使用已命名的网址,我尝试使用

链接到这些网页
<a href="{% url 'my-flatpage' %}">Awesome!</a>

在本地工作,但不在测试服务器上工作。

我为Flatpages启用了中间件:

MIDDLEWARE_CLASSES = (
    ...
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    ...
)

我知道以 / 开头的链接是指根。因此它会跳过实际存储它的子目录。我只是不知道如何在一个子目录中安装Django来建立正确的链接。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用中间件时,没有好的解决方案。使用urls.py时,很简单:https://docs.djangoproject.com/en/dev/ref/contrib/flatpages/#using-the-urlconf

你可以明确指出:

from django.contrib.flatpages import views

urlpatterns += [
    url(r'^about-us/$', views.flatpage, {'url': '/about-us/'}, name='about'),
    url(r'^license/$', views.flatpage, {'url': '/license/'}, name='license'),
]

或只是视图:

from django.contrib.flatpages import views

# Your other patterns here
urlpatterns += [
    url(r'^(?P<url>.*/)$', views.flatpage, name='flatpage'),
]

结合这些网址:

<a href="{% url 'about' %}">About</a>
<a href="{% url 'about' %}">License</a>
<a href="{% url 'flatpage' url='/some_other_page/' %}">Some other page</a>