0

I am trying to make a link in the sidebar of my Person model as persons. For that I made a templatetags folder where my member_template_tags.py:

from django import template
from member.models import Person
register = template.Library()

@register.inclusion_tag('member/person_list.html')
def get_person_list():
     persons= Person.objects.all(),
     return {'persons': persons}

and my view file:

class PersonListView(generic.ListView):
    model = Person
    context_object_name = 'persons'

my person_list.html:

{% extends 'member/base.html' %}

{% block content %}
    <h2>Members</h2>
    <table>

        <tr>
            <th>sl.</th>
            <th>Name and Position</th>
            <th>Photo</th>
            <th>Organisation & Address</th>
            <th>Contact</th>
        </tr>
        {% for person in object_list %}
        <tr>
            <td>{{forloop.counter}}.</td>
            <td>{{person.name}}<br>
            {{person.present_position}}
</td>
            <td><a href="{% url 'member:person-list' %}">
            <img src="{{ person.photo_url|default_if_none:'#'}}" class="img-responsive">
        </a></td>
            <td>
            {{person.organization}}<br>
           {{person.address}}
            </td>
            <td>
             {{person.tele_land}}<br>
             {{person.tele_cell}}<br>
             {{person.email}}
            </td>
        </tr>


    </table>
{% endblock %}

and in base.html, sidebar code is:

<div class="col-sm-3 col-md-2 sidebar">
            {% block sidebar_block %}
                {% get_person_list %}
            {% endblock %}
        </div>

When I tried it gives following traceback: Template error:

In template /home/ohid/test_venv/alumni/member/templates/member/person_list.html, error at line 0
   Reverse for 'registration_register' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []   
1 : {% extends 'member/base.html' %}
       2 : 
       3 : 
       4 : 
       5 :     <h2>Members</h2>
       6 :     <table>
       7 : 
       8 :         <tr>
       9 :             <th>sl.</th>
       10 :             <th>Name and Position</th>

Traceback:

    File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
      507.                               current_app=current_app)

    File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/urlresolvers.py" in reverse
      600.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

    File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
      508.                              (lookup_view_s, args, kwargs, len(patterns), patterns))

    During handling of the above exception (Reverse for 'alumni.registration_register' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []), another exception occurred:

    File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
      174.                     response = self.process_exception_by_middleware(e, request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
  172.                     response = response.render()

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/response.py" in render
  160.             self.content = self.rendered_content

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/response.py" in rendered_content
  137.         content = template.render(context, self._request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/backends/django.py" in render
  95.             return self.template.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render
  206.                     return self._render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in _render
  197.         return self.nodelist.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render
  992.                 bit = node.render_annotated(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  959.             return self.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  173.         return compiled_parent._render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in _render
  197.         return self.nodelist.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render
  992.                 bit = node.render_annotated(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  959.             return self.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  326.                 return nodelist.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render
  992.                 bit = node.render_annotated(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  959.             return self.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  513.                         six.reraise(*exc_info)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/utils/six.py" in reraise
  686.         raise value

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/defaulttags.py" in render
  499.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/urlresolvers.py" in reverse
  600.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
  508.                              (lookup_view_s, args, kwargs, len(patterns), patterns))

Exception Type: NoReverseMatch at /person/

Edit:

When I use

<div class="col-sm-3 col-md-2 sidebar">
            {% block sidebar_block %}
                {% get_person_list persons %}
            {% endblock %}
        </div>

The same code gives 'get_person_list' received too many positional arguments errors. The new traceback:

Template error:
In template /home/ohid/test_venv/alumni/member/templates/member/base.html, error at line 57
   'get_person_list' received too many positional arguments   47 : 
   48 :         </nav>
   49 :       </div>
   50 : 
   51 :     </nav>
   52 : 
   53 :     <div class="container-fluid">
   54 :       <div class="row">
   55 :         <div class="col-sm-3 col-md-2 sidebar">
   56 :             {% block sidebar_block %}
   57 :                  {% get_person_list persons %} 
   58 :             {% endblock %}
   59 :         </div>
   60 :         <div class="col-sm-9 offset-sm-3 col-md-10 offset-md-2 main">
   61 :          {% block body_block %}{% endblock %}
   62 : 
   63 : 
   64 :         </div>
   65 :       </div>
   66 :     </div>
   67 : 


Traceback:

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/library.py" in parse_bits
  296.                     unhandled_params.pop(0)

During handling of the above exception (pop from empty list), another exception occurred:

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
  174.                     response = self.process_exception_by_middleware(e, request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response
  172.                     response = response.render()

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/response.py" in render
  160.             self.content = self.rendered_content

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/response.py" in rendered_content
  137.         content = template.render(context, self._request)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/backends/django.py" in render
  95.             return self.template.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render
  206.                     return self._render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in _render
  197.         return self.nodelist.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render
  992.                 bit = node.render_annotated(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in render_annotated
  959.             return self.render(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/loader_tags.py" in render
  151.         compiled_parent = self.get_parent(context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/loader_tags.py" in get_parent
  148.         return self.find_template(parent, context)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/loader_tags.py" in find_template
  128.             template_name, skip=history,

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/engine.py" in find_template
  157.                         name, template_dirs=dirs, skip=skip,

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/loaders/base.py" in get_template
  46.                     contents, origin, origin.template_name, self.engine,

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in __init__
  189.         self.nodelist = self.compile_nodelist()

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in compile_nodelist
  231.             return parser.parse()

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in parse
  516.                     raise self.error(token, e)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in parse
  514.                     compiled_result = compile_func(self, token)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/loader_tags.py" in do_block
  241.     nodelist = parser.parse(('endblock',))

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in parse
  516.                     raise self.error(token, e)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/base.py" in parse
  514.                     compiled_result = compile_func(self, token)

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/library.py" in compile_func
  163.                     takes_context, function_name,

File "/home/ohid/test_venv/lib/python3.5/site-packages/django/template/library.py" in parse_bits
  301.                             name)

Exception Type: TemplateSyntaxError at /person/
Exception Value: 'get_person_list' received too many positional arguments

How do I fix this error and make link in the sidebar so that it gives the full view of person_list template?

Any help will be much appreciated.

ohid
  • 824
  • 2
  • 8
  • 23
  • Can you post more specifics of your code ? Specially where you've used the reverse url **alumni.registration_register** since the error is indicating that Django's not able to find the *named url* for that. – SpiXel Aug 30 '16 at 06:13
  • Actually I also tried to find alumni.registration_register code but no where I posted this code. Do you want to my urls or view code? I only use register in templatedtags. when I use {% get_person_list persons %} in base template, same code gives " 'get_person_list' received too many positional arguments" errors. – ohid Aug 30 '16 at 06:25
  • Well you mean there isn't any usage of *alumni.registration_register* ? This is pretty unlikely since this is exactly what the traceback is about. Posting your urls won't do any damage though but I suspect it won't be of so much help. – SpiXel Aug 30 '16 at 06:31
  • Yes, I didn't do any alumni.registration_register. I already mentioned my previous reply that same code gives different errors when I just add persons with the get_person_list in base template sidebar div. – ohid Aug 30 '16 at 06:34
  • You get too many positional arguments, because your template tag does not actually accept any positional arguments, but you're feeding *persons* into it in your base.html: {% get_person_list *persons* %}. But I can't tell the NoReverseMatch exception with what you've provided. – SpiXel Aug 30 '16 at 06:40
  • Possible duplicate of [What is a NoReverseMatch error, and how do I fix it?](http://stackoverflow.com/questions/38390177/what-is-a-noreversematch-error-and-how-do-i-fix-it) – Sayse Aug 30 '16 at 06:43
  • @SpiXel, I already posted the new traceback in my Edit portion of my question. Could you check it where I am doing wrong. – ohid Aug 30 '16 at 06:56

1 Answers1

1

There are too many issues with your code to correctly identify what is the problem.

  1. You have an extra comma in your custom tag:

    @register.inclusion_tag('member/person_list.html')
    def get_person_list():
        persons= Person.objects.all(), # <-- remove this comma
        return {'persons': persons}
    
  2. Your context variable is called persons, yet you are using object_list in your template, this needs to be corrected.

  3. Your template has a for loop, but its missing a endfor

  4. You have {% url 'member:person-list' %} this is a namespaced URL. Make you have set it up correctly in your urls.py.

  5. Your tag doesn't take any arguments, yet you are passing it a context variable in {% get_person_list persons %}.

Once you solve all these, you have to figure out where the actual error is coming from. Chances are, it is in your base template which you are inheriting as its obvious you don't have a registration_register url tag in the code you have posted.

Burhan Khalid
  • 169,990
  • 18
  • 245
  • 284
  • I removed comma from persons, changes object_list to persons, added endfor, and in my member urls, it has app_name='member'. I also removed persons argument from {% get_person_list persons %}. But now it gives errors as : Error during template rendering In template /home/ohid/test_venv/alumni/member/templates/member/person_list.html, error at line 0 Reverse for 'registration_register' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] – ohid Aug 30 '16 at 07:08
  • Yes, I got the registration_register at the base template but it was commented out. Now I removed that block and It said: "maximum recursion depth exceeded in __instancecheck__ "at my person_list template's line {% for person in persons %}. I am using pycharm editor. – ohid Aug 30 '16 at 09:04