Cohen
Cohen

Reputation: 984

Django Error ---index() missing 1 required positional argument: 'pk'

I have this error when try to open a path. It requires a pk in my def and i inserted it, but still the issue is there. If someone could help, i would owe you a lot!

This is the error i have in browser:

TypeError at /batches/
index() missing 1 required positional argument: 'pk'
Request Method: GET
Request URL:    http://127.0.0.1:8000/batches/
Django Version: 1.11.1
Exception Type: TypeError
Exception Value:    
index() missing 1 required positional argument: 'pk'
Exception Location: /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response, line 185
Python Executable:  /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
Python Version: 3.6.1
Python Path:    
['/Users/cohen/Documents/project/sanctions',
 '/Users/cohen/Documents/project/sanctions',
 '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip',
 '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6',
 '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages',
 '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyObjC']
Server time:    Mon, 24 Jul 2017 10:47:02 +0000

My urls in batches

from django.conf.urls import url
from . import views

urlpatterns = [
    # /batches/
    url(r'^$', views.index, name='index'),

    # /batches/2
    url(r'^(?P<batches_id>[0-9]+)/$',views.detail, name="detail"),

    # businessname/1
    url(r'^(?P<businessname_id>[0-9]+)/$',views.index_businessname, name="detail_businessname"),

    # individuals/1
    url(r'^(?P<individuals_id>[0-9]+)/$', views.index_individuals, name="detail_individuals"),
]

And the views:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .models import BusinessName
from .models import Individuals
from .models import Batches

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request, pk):
    all_Batches = Batches.objects.all()
    html = ''
    for batch in all_Batches:
        url = '/batches/' + str(batch.id) + '/'
        html += '<a href="#"' + url + '">' + str(batch.BatchNumber)+ '</a><br>'
    return  HttpResponse(html)

def detail(request, batch_id):
    return HttpResponse("<h2>Details for Batches ID:"  + str(batch_id) + "</h2")


def index_businessname(request):
    all_BusinessNames = BusinessName.objects.all()
    html = ''
    for bn in all_BusinessNames:
        url = '/businessname/' + str(bn.id) + '/'
        html += '<a href="#"' + url + '">' + bn.FullName + '</a><br>'
    return HttpResponse(html)

def detail_businessnames(request, bn_id):
    return HttpResponse("<h2>Details for Business Names ID:"  + str(bn_id) + "</h2")

def index_individuals(request):
    all_individuals = Individuals.objects.all()
    html = ''
    for i in all_individuals:
        url = '/individuals/' + str(i.id) + '/'
        html += '<a href="#"' + url + '">' + i.FullName + '</a><br>'
    return HttpResponse(html)


def detail_individuals(request, i_id):
    return HttpResponse("<h2>Details for Individual Names ID:"  + str(i_id)+ "</h2")

Thank you in advance, Cohen

Upvotes: 5

Views: 16654

Answers (3)

Emil George James
Emil George James

Reputation: 1261

Include pk in your url.

Change your url like this,

url(r'(?P<pk>\d+)/$', views.index, name='index'),

instead of,

# /batches/

url(r'^$', views.index, name='index'),

OR,

if you are not passing pk to views then remove pk from index view as showned below.

def index(request):
    all_Batches = Batches.objects.all()
    html = ''
    for batch in all_Batches:
        url = '/batches/' + str(batch.id) + '/'
        html += '<a href="#"' + url + '">' + str(batch.BatchNumber)+ '</a><br>'
    return  HttpResponse(html)

Upvotes: 5

Harun-Ur-Rashid
Harun-Ur-Rashid

Reputation: 3478

Your url /batches/ has no parameter. So, Your index view should be

def index(request):
   # ......

Upvotes: 1

Self
Self

Reputation: 537

There are two arguments for the index view. The URL that you have written only gives request. You must give pk as an input just like the detail URL

Upvotes: 3

Related Questions