Reverse for 'category-detail' with arguments '('',)' not found

Question:

I get this error when I try accessing my home page. I’ve tried reading similar solutions but I can’t directly relate them to my case. I’m clearly missing something here but I can’t see it.

this is the traceback error message:

Traceback (most recent call last):
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangocorehandlersexception.py", line 55, in inner    
    response = get_response(request)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangocorehandlersbase.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:UsersMuhumuza-IvanDesktopJobPortaljobappviews.py", line 68, in index
    return render(request, 'index.html', context)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangoshortcuts.py", line 24, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplateloader.py", line 62, in render_to_string 
    return template.render(context, request)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebackendsdjango.py", line 62, in render  
    return self.template.render(context)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 175, in render
    return self._render(context)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 167, in _render
    return self.nodelist.render(context)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatebase.py", line 958, in render_annotated       
    return self.render(context)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangotemplatedefaulttags.py", line 472, in render
    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangourlsbase.py", line 88, in reverse
    return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
  File "C:UsersMuhumuza-IvanAppDataLocalProgramsPythonPython310libsite-packagesdjangourlsresolvers.py", line 802, in _reverse_with_prefix  
    raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'category-detail' with arguments '('',)' not found. 1 pattern(s) tried: ['jobapp/category/(?P<slug>[-a-zA-Z0-9_]+)/\Z']

Index.html
The error in the browser directly points to the HumanResource option

<option><a href="{% url 'category-detail' Nursing.slug %}"></a><span class="text-dark">{{Nursing.title}}</span></option>
<option><a href="{% url 'category-detail' Education.slug %}"></a><span class="text-dark">{{Education.title}}</span></option>
<option><a href="{% url 'category-detail' HumanResource.slug %}"></a><span class="text-dark">{{HumanResource.title}}</span></option>
<option><a href="{% url 'category-detail' NGO.slug %}"></a><span class="text-dark">{{NGO.title}}</span></option>
<option><a href="{% url 'category-detail' Computing.slug %}"></a><span class="text-dark">{{Computing.title}}</span></option>
<option><a href="{% url 'category-detail' Medical.slug %}"></a><span class="text-dark">{{Medical.title}}</span></option>

views.py

def index(request):
    form = SearchForm()

    elitejobs = Jobs.objects.filter(company__title='EliteJobsToday')[:5]
    alljobs = Jobs.objects.filter(company__title='alljobspo')[:5]

    context = {}
    context['elitejobs'] = elitejobs
    context['alljobs'] = alljobs
  
    context['Manager'] = Category.objects.get(title='Manager')
    context['Engineer'] = Category.objects.get(title='Engineer')
    context['Architect'] = Category.objects.get(title='Architect')
    context['SoftwareDeveloper'] = Category.objects.get(title='SoftwareDeveloper')
    context['Insurance'] = Category.objects.get(title='Insurance')
    context['Uncategorised'] = Category.objects.get(title='Uncategorised')
   
    context['form'] = form

    if request.method == 'POST':
        form = SearchForm(request.POST)
        if form.is_valid():
            search = form.cleaned_data.get('title')

            jobs = []
            if len(search.split())>1:
                search_list = search.split()
                item_list = []
                for item in search_list:
                    a_list = Jobs.objects.filter(title__icontains=item)
                    for x in a_list:
                        item_list.append(x)
                [jobs.append(x) for x in item_list if x not in jobs]        
                
                return render(request, 'job-list.html', {'jobapp': jobs})
            else:
                jobs = Jobs.objects.filter(title__icontains=search)

                return render(request, 'job-list.html', {'jobapp': jobs})
        else:
            messages.error(request, 'Error Processing Your Request')
            context['form'] = form
            return render(request, 'index.html', context)
    
    return render(request, 'index.html', context)

def category_detail(request, slug):
    the_category = Category.objects.get(slug=slug)
    context = {}

    jobs = Jobs.objects.filter(category__slug=slug)[:20]
    context['jobs'] = jobs
    context['the_category'] = the_category

    return render(request, 'category-detail.html', context)

urls.py

  path('jobapp/category/<slug:slug>/', job_views.category_detail, name='category-detail'),
Asked By: Muhumuza

||

Answers:

make sure the value passed to category-detail is not null so you can do something like the following in every line in template

 {% if Nursing.slug %}
    <option><a href="{% url 'category-detail' Nursing.slug %}"></a>
<span class="text-dark">{{Nursing.title}}</span></option>
   {% endif %}
 {% if Education.slug %}
    <option><a href="{% url 'category-detail' Education.slug %}"></a><span class="text-dark">{{Education.title}}</span></option>
{% endif %}

   {%if HumanResource.slug %} 
    <option><a href="{% url 'category-detail' HumanResource.slug %}"></a><span class="text-dark">{{HumanResource.title}}</span></option>
    <option><a href="{% url 'category-detail' NGO.slug %}"></a><span class="text-dark">{{NGO.title}}</span></option>
{% endif %}
 {% if Computing.slug %}
    <option><a href="{% url 'category-detail' Computing.slug %}"></a><span class="text-dark">{{Computing.title}}</span></option>
{% endif %}
{% if  Medical.slug %}
    <option><a href="{% url 'category-detail' Medical.slug %}"></a><span class="text-dark">{{Medical.title}}</span></option>
{% endif %}

but better solution for this is to prevent null value for slug field

Answered By: Mohamed Beltagy
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.