如何处理django / wagtail

时间:2018-01-30 07:50:58

标签: django wagtail

如何处理同一网址的两个不同视图? (两个视图都需要数据库调用来确定被调用的元素是否可用。更改url结构不是一种选择。)

url(r'^', include(wagtail_urls)),

此wagtail网址与所有网址匹配,如果相应的网页/ slug不在数据库中,则会提高404。

但是,我也有自己的观点,女巫的行为相似。我怎么能告诉django继续使用下一个url而不是提高404?

(我可以在wagtail视图之前放置我自己的视图并修改它,但我不知道如何返回到下一个URL?)

这是我最后的解决方案:

from wagtail.wagtailcore.views import serve

    # ... in my view where I normally return a 404 => I set this:
    return serve(self.request, self.request.path)

1 个答案:

答案 0 :(得分:3)

首先,在不同视图中共享相同的url模式是个坏主意。 你的项目越大,维护它就越困难。

尽管如此,如果你想要这样,还是有办法。

您可以将自己的视图放在urls.py中,就像您的说法一样,

首先处理一些你自己的逻辑并在你的视图中没有任何东西显示时捕获404异常而不是简单地调用" Wagtail"查看请求原始参数(页面,slug等)和return语句。

以下是示例。 这个例子基于Django基于功能的视图,但在基于类的视图中有这样的方式。

def your_own_view(request, slugs):
    try:
        article = get_object_or_404(Article, slugs=slugs)
    except Http404:
        return some_wagtail_view(request, slugs)

    ...

    return render(request, "article/view.html", context)