Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

python

django

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

like image 875
Cohen Avatar asked Jul 24 '17 10:07

Cohen


2 Answers

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)
like image 88
Emil George James Avatar answered Oct 12 '22 16:10

Emil George James


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

like image 3
Self Avatar answered Oct 12 '22 14:10

Self