Django得到了一个意想不到的关键字参数'id'

时间:2016-05-16 13:14:06

标签: python django

我正在尝试在Django中创建一个电话簿。 我的urls.py:

    urlpatterns = [
    url(r'^$', views.people_list, name='people_list'),
    url(r'^(?P<id>\d)/$', views.person_detail, name='person_detail'),
]

views.py:

def people_list(request):
    people = Person.objects.all()
    return render(request, 'phonebook/person/list.html', {'people': people})


def person_detail(request, person):
    person = get_object_or_404(Person, id=person)
    return render(request, 'phonebook/person/detail.html', {'person': person})
来自models.py的

def get_absolute_url(self):
    return reverse('phonebook:person_detail', args=[self.id])

和list.html:

{% block content %}
<h1>Phonebook</h1>
{% for person in people %}
<h2>
    <a href="{{ person.get_absolute_url }}">
        {{ person.name }} {{ person.last_name }}
    </a>
</h2>
<p class="where">
{{ person.department }}, {{ person.facility }}
    </p>
{{ person.phone1 }}<br>
{% endfor %}
{% endblock %}

索引看起来不错,但是当我尝试点击链接获取person_detail网站时,我收到此消息:

  

/ phonebook / 4 /上的TypeError   person_detail()得到一个意外的关键字参数'id'   请求方法:GET请求   URL:http://127.0.0.1:8000/phonebook/4/ Django版本:1.9.6   异常类型:TypeError异常值:person_detail()得到了   意外关键字参数'id'

我在urls.py中有'id'参数,在函数中有get_absolute_url。我不明白什么是错的。

3 个答案:

答案 0 :(得分:17)

您在URL映射中的参数?P<id>必须与视图def person_detail(request, person):中的参数匹配

他们应该都是idperson

答案 1 :(得分:2)

您应该修复视图并使用id参数名称而不是person

def person_detail(request, id):

答案 2 :(得分:0)

我的错误是我仅添加了第一个参数而不是两个参数,即我提到了def person_detail(request)而不是def person_detail(request,id)