tonryray
tonryray

Reputation: 15

Django display list items based on URL

I'm trying to hide/show sections of my navigation depending on my active URL.

I have attempted to do this using the re.match() method, but jinja did not like this. This code is in an HTML include file for my side navigation and is as follows:

<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>

Thanks in advance.

Upvotes: 0

Views: 123

Answers (1)

Tiny Instance
Tiny Instance

Reputation: 2671

You can create a custom filter and use it. Something like this maybe;

# 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

Inside the template

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

Update as per your comment. From Django docs code layout section for custom template tags and filters:

The app should contain a templatetags directory, at the same level as models.py, views.py, etc. If this doesn’t already exist, create it - don’t forget the init.py file to ensure the directory is treated as a Python package.

So create a folder at same level as your view.py and name it templatetags. (Don't forget to add __init__.py inside). At the same level of that __init__.py add your nav_active.py and it should be ready to use. Like this:

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

Upvotes: 1

Related Questions