Django显示基于URL

时间:2016-07-25 22:40:46

标签: django python-3.x jinja2

我正在尝试隐藏/显示导航部分,具体取决于我的有效网址。

我尝试使用re.match()方法执行此操作,但jinja不喜欢这样。此代码位于我的侧面导航的HTML包含文件中,如下所示:

<ul>
{% if bool(re.match('^/url/path', request.get_full_path)) %}
    <li><a href='link1'>Link1</a></li>
    <li><a href='link1'>Link2</a></li>
    <li><a href='link1'>Link3</a></li>
{% endif %}
</ul>

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以创建custom filter并使用它。这样的事可能;

# nav_active.py
import re
from django.template import Library
from django.core.urlresolvers import reverse

register = Library()

@register.filter()
def nav_active(request_path, search_path):
    # WRITE YOUR LOGIC
    return search_path in request_path

在模板内

{% load nav_active %}
{% if request_path|nav_active:"/search/path" %}
....
{% endif %} 

根据您的评论更新。从Django docs code layout section获取自定义模板标签和过滤器:

  

应用程序应包含templatetags目录,与models.py,views.py等处于同一级别。如果尚不存在,请创建它 - 不要忘记 init .py文件以确保将目录视为Python包。

因此,请在与view.py相同的级别创建一个文件夹,并将其命名为templatetags。 (别忘了在里面添加__init__.py)。在__init__.py的同一级添加您的nav_active.py,它应该可以使用了。像这样:

yourapp/
  __init__.py
  models.py
  views.py
  templatetags/
     __init__.py
     nav_active.py