Kenton
Kenton

Reputation: 69

Reverse for '' with arguments '()' and keyword arguments not found. Django

I have been having trouble with this for a few dayss and havent been able to find any answers. Basically I want the url to be the / as in if its print then I want /print.

I understand that my regex is probably wrong and will need changed, but here is my code.

Myproject/urls.py

url(r'^(?P<pk>)/$', views.page_detail, name='page_detail'),

It throws the error on line 5 function_list.html

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

{% block content %}
{% for page in pages %}
    <h1><a href="{% url 'page_detail' pk=page.pk %}">{{ page.function }}</a></h1>
    <p>{{ page.usage|linebreaksbr }}</p>
{% endfor %}
{% endblock %}

views.py

def page_detail(request, pk):
    page = get_object_or_404(Page, pk=pk)
    return render(request, 'wiki/page_detail.html', {'page': page})   

page_detail

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

{% block content %}
<h1>{{ page.function }}</h1>
<p>{{ page.usage|linebreaksbr }}</p>

{% endblock %}

The specific error is

Reverse for 'page_detail' with arguments '()' and keyword arguments '{'pk': 'print'}' not found. 1 pattern(s) tried: ['page/(?P<pk>)/$']

if anyone has any ideas or resources for me to look at I would appreciate it.

edit: include page model

models.py

class Page(models.Model):
    function = models.CharField(max_length=100, primary_key=True)
    usage = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    library = models.CharField(max_length=100)
    parameters = models.TextField()
    returnValues = models.CharField(max_length=100)
    examples = models.TextField()
    notes = models.TextField()
    seeAlso = models.TextField()

Upvotes: 0

Views: 1312

Answers (2)

Moses Koledoye
Moses Koledoye

Reputation: 78554

You need to match the pk you're passing in your regex:

url(r'^(?P<pk>\w+)/$', views.page_detail, name='page_detail'),
#             ^^^

\w+ is a character set that matches alphanumeric characters and the underscore, which will match 'print' in the current context.

Upvotes: 1

Milen Louis
Milen Louis

Reputation: 223

From your question, it seems you have more than one url that points to that view. So, remove the duplicate url. If that's not the issue then make sure you are passing the "object id" correctly through the url. The "object id" (?P<pk>\d+) is a required parameter in the url to DetailView.

Upvotes: 0

Related Questions