Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

list_of_post() got an unexpected keyword argument 'slug'

Tags:

python

django

I am following a tutorial, but this tutorial's django version is different form mine which is 2.0.5. So,I got this issue:

list_of_post() got an unexpected keyword argument 'slug'
Request Method: GET
Request URL:    http://127.0.0.1:8000/blog/a-test/
Django Version: 2.0.5
Exception Type: TypeError
Exception Value:    
list_of_post() got an unexpected keyword argument 'slug'
Exception Location: /Users/sumeixu/anaconda3/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response, line 126
Python Executable:  /Users/sumeixu/anaconda3/bin/python
Python Version: 3.6.3
Python Path:    
['/Users/sumeixu/djangotest',
 '/Users/sumeixu/anaconda3/lib/python36.zip',
 '/Users/sumeixu/anaconda3/lib/python3.6',
 '/Users/sumeixu/anaconda3/lib/python3.6/lib-dynload',
 '/Users/sumeixu/anaconda3/lib/python3.6/site-packages',
 '/Users/sumeixu/anaconda3/lib/python3.6/site-packages/aeosa']
Server time:    Thu, 7 Jun 2018 15:00:29 +0000

blog/view.py

def post_detail(request,slug):
    post = get_object_or_404(Post,slug=slug)
    template = 'blog/post/post_detail.html'
    return render(request,template,{'post':post}) 

post_of_detail.html

{% extends 'blog/post/base.html' %}

{% block title %}{{post.seo_title}}{% endblock %}

{% block content %}
         <h2>{{ post.title }}</h2>
         <p>Written by {{post.author }} on {{post.published}}</p>
         <hr>
         {{posts.content}
{% endblock %}

list_of_post.html

{% extends 'blog/post/base.html' %}

{% block title %}List of blog post{% endblock %}

{% block content %}
     {% for posts in post %}
         <h2><a href="{{posts.get_absolute_url}}">{{ posts.title }}</a></h2>
         <p>Written by {{ posts.author }} on {{ posts.published}}</p>
         <hr>
         {{ posts.content}}
     {% endfor %}
{% endblock %}

blog/urls.py

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

app_name = 'blog'
urlpatterns =[
    path('',views.list_of_post,name='list_of_post'),
    path('<slug:slug>/',views.list_of_post,name='post_detail')
]

I am sorry if this is too simple. But I am still a programmer beginner. Just need some help. Thank you.

like image 651
Sue-May Xu Avatar asked Sep 19 '25 13:09

Sue-May Xu


1 Answers

In your urls.py you write:

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

app_name = 'blog'
urlpatterns =[
    path('',views.list_of_post,name='list_of_post'),
    path('<slug:slug>/',views.list_of_post,name='post_detail')
]

But the view should probably be post_detail, so you should change it to:

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

app_name = 'blog'
urlpatterns =[
    path('',views.list_of_post,name='list_of_post'),
    path('<slug:slug>/',views.post_detail,name='post_detail')
]

By linking list_of_post to the second path(..) Django will invoke this function with a slug parameter, but of course the function can not handle this, hence the TypeError.

like image 60
Willem Van Onsem Avatar answered Sep 21 '25 03:09

Willem Van Onsem