Django - 将request.path分解为每个单词?

时间:2011-10-06 03:02:22

标签: django django-templates

我想从模板中取request.path的网址,然后对第一个单词进行测试。如果我的网址是这样的:

/estimates/commercial

我想以某种方式从commercial中移除request.path。我希望在模板中也可以这样做,因为我需要在每个页面都进行检查。

这可以在我的Django模板中使用吗?

编辑 - 澄清

这样做的目的是根据当前正在查看的页面突出显示导航链接。我有一个主导航和一个子导航,我想强调如下:

main nav           --> [Systems][Estimates]
"Systems" sub nav ---> [New][Details][Invoives]

如果我在Details部分的Systems部分,我希望System Details这两个词的颜色不同或下划线或其他东西。

3 个答案:

答案 0 :(得分:4)

您的选择是:

  1. 撰写ContextProcessor

  2. 编写自定义模板过滤器。我建议只编写一个分割模板过滤器,然后使用连接和切片过滤器来获得所需的效果。但是,编写一个完成整个过程的过滤器可能更容易。

  3. 说实话,我认为#1是更好的选择。您正在使用上下文处理器吗?如果没有,现在是时间=)

    def somename(request):
        return { 'some_context_var': request.path.split('/')[:-1] }
    

    编辑:

    如果你的路径是/ something / foo / bar / estimate / commercial /

    def somename(request):
        primary, secondary  = request.path.split('/')[-2:]
        return { 'primary_name': primary, 'secondary_name': secondary }
    

    会给你2个上下文变量,其中'估计'和'商业'作为它们的值。这个想法很容易扩展,甚至可以更抽象,并允许添加任意数量的上下文变量。

答案 1 :(得分:1)

您可以使用django-treemenus,可以通过多种方式进行扩展。在manual中,还有一个示例,如果用户位于特定路径内,如何突出显示导航项。

答案 2 :(得分:0)

如果不编写自己的custom template filter,我认为在视图代码中执行此操作会更容易,并将相关部分传递到模板中。