【问题标题】:What is the correct way to link Django Flatpages?链接 Django Flatpages 的正确方法是什么?
【发布时间】:2015-06-08 18:01:15
【问题描述】:

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

可以在 https://example.com/django 下访问 Django 应用程序,并且一切都已配置并运行良好。

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

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

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

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

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

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

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

我为平面页面启用了中间件:

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

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

感谢您的帮助!

【问题讨论】:

    标签: python django apache


    【解决方案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>
    

    【讨论】:

    • 非常感谢您!我不知道使用中间件给我带来了麻烦……但我很想使用你提到的第二个选项:命名为 catchall 引用 {% url 'flatpage' url='my-flatpage' %}。但是当我在 Apache2 服务器上使用它时,我得到了这个错误:NoReverseMatch at / Reverse for 'flatpage' with arguments '()' and keyword arguments '{u'url': u'/my-flatpage/'}' not found. 0 pattern(s) tried: []你有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2020-09-05
    • 1970-01-01
    相关资源
    最近更新 更多