代码之家  ›  专栏  ›  技术社区  ›  Bernhard Vallant

Django:分层URL

  •  3
  • Bernhard Vallant  · 技术社区  · 14 年前

    如何处理django中的分层URL?有什么最佳实践吗? 如果我有这样的网址 /blog/category1/category2/myblogentry (使用Django MPTT),您能在登机前做些检查吗? urls.py 或者给出一个视图的整个路径,让它检查每个部分是否是有效的类别等等? 听起来不难,但只是好奇是否有人可以推荐一些最佳实践或展示一些好的(通用的)解决方案?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Arthur Debert    14 年前

    恐怕你的问题没有一个答案。问题是,在URL级别上指定了层次结构的外观,使用它捆绑了太多的逻辑。

    我发现对用户装饰师很有用。例如,在您的案例中,您可以编写一个装饰器来检查类别的完备性,并且只将最后一个类别传递给视图。类似于可以使用此签名的函数的修饰器:

    f(request, cat1, catN..., slug)
    

    检查每个类别是否确实是下一个类别的父类别,并向下传递视图最终选中的类别。

    @validate_category_hierarchy
    def post_in_category(request, category, slug):
    

    如果您真的需要它是可扩展的,那么装饰器可以做一些内省和猜测(例如树的深度,剩余的参数是什么,等等)。

    然后,您所需要做的就是仔细编写URL配置,这样装饰器就可以得到形状良好的参数。 通过

        2
  •  1
  •   Swordfish    13 年前

    这是 http://djangosnippets.org/snippets/362/ 也很有用。它可以解决在没有修饰符的情况下检查URL是否匹配的问题。