【问题标题】:Django got an unexpected keyword argument 'id'Django 有一个意外的关键字参数 'id'
【发布时间】:2016-09-12 07:07:16
【问题描述】:

我正在尝试在 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/ 处的类型错误 person_detail() 得到了一个意外的关键字参数“id” 请求方式:GET请求 网址:http://127.0.0.1:8000/phonebook/4/ Django 版本:1.9.6 异常类型:TypeError 异常值:person_detail() 得到一个 意外的关键字参数“id”

我在 urls.py 和 get_absolute_url 的函数中有和 'id' 参数。我不明白怎么了。

【问题讨论】:

    标签: python django


    【解决方案1】:

    URL 映射中的参数?P&lt;id&gt; 必须与视图def person_detail(request, person): 中的参数匹配

    他们应该都是id 或者都是person

    【讨论】:

    • 谢谢。我对此感到困惑。
    【解决方案2】:

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

    def person_detail(request, id):
    

    【讨论】:

    • 我在 url 中将 id 更改为 person。谢谢!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2021-10-29
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多