Django 得到了一个意外的关键字参数 'id_speaker'
Django Got an unexpected keyword argument 'id_speaker'
我有一个显示演讲者姓名列表的模板,它们是 url,我想点击这些 url 并转到演讲者页面,我通过一个唯一的 id 找到演讲者,如下所示“832fc2ca-787f” -484b-b815-f82959607311",问题是我收到错误
get_speaker_by_id() got an unexpected keyword argument 'id_speaker'
我认为问题出在 urls.py 或 speakers.html href 上。我查看了每个相关问题,但无法提交解决方案。
urls.py
url(r'^speakers', views.speakers_list, name='speakers'),
url(r'^speaker/(?P<id_speaker>[0-9a-z\-]+)/$',
views.get_speaker_by_id, name='get_speaker_by_id_url')
这是显示演讲者姓名列表的模板
speakers.html
{% for speaker in all_speakers_list%}
<div class="container">
<div class="row">
<div class="col-sm-6">
<a href="{% url 'get_speaker_by_id_url' speaker.speaker_id %}">{{ speaker.greek_name }}</a>
</div>
</div>
</div>
{% endfor %}
views.py
get_speaker_by_id(request, id_speaker):
''' Get speaker info by id '''
requested_speaker = Speaker.objects.get(speaker_id=id_speaker)
template = loader.get_template('greekparliament/speaker.html')
context = {
'requested_speaker': requested_speaker
}
return HttpResponse(template.render(context, request))
models.py
class Speaker(models.Model):
speaker_id = models.CharField(max_length=200, default='')
english_name = models.CharField(max_length=200, default='', blank=True)
image = models.CharField(max_length=200, default='', blank=True)
email = models.EmailField(max_length=254, default='', blank=True)
wiki_el = models.URLField(max_length=200, default='', blank=True)
twitter = models.URLField(max_length=200, default='', blank=True)
greek_name = models.CharField(max_length=200, default='')
wiki_en = models.URLField(max_length=200, default='', blank=True)
website = models.URLField(max_length=200, default='', blank=True)
当我们看到如下错误时
get_speaker_by_id() got an unexpected keyword argument 'id_speaker'
我们可以清楚地看到它正在寻找一个名为 id_speaker
.
的参数
从您发布的 views.py
文件的代码中,我可以清楚地看到传递了参数 id_speaker
。因此,只有一件事可能会产生该错误,那就是 您已经在 views.py
文件中多次定义函数 get_speaker_by_id()
。
P.S。
通过以下已实施最佳实践的代码更改函数 get_speaker_by_id()
的代码。
from django.shortcuts import render
...
def get_speaker_by_id(request, id_speaker):
"""
Get speaker info by id <You should always write doc>
For example, you can follow numpy guidelines on how to
write docs - https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
Parameters
----------
request
Django request that will come from http
id_speaker: str
Id of the speaker
"""
# I think you should handle `DoesNotExist` error here or it will crash
# with an Internal Server Error when id_speaker does not exists in db
requested_speaker = Speaker.objects.get(speaker_id=id_speaker)
context = {
'requested_speaker': requested_speaker
}
return render(request, "greekparliament/speaker.html", context)
我有一个显示演讲者姓名列表的模板,它们是 url,我想点击这些 url 并转到演讲者页面,我通过一个唯一的 id 找到演讲者,如下所示“832fc2ca-787f” -484b-b815-f82959607311",问题是我收到错误
get_speaker_by_id() got an unexpected keyword argument 'id_speaker'
我认为问题出在 urls.py 或 speakers.html href 上。我查看了每个相关问题,但无法提交解决方案。
urls.py
url(r'^speakers', views.speakers_list, name='speakers'),
url(r'^speaker/(?P<id_speaker>[0-9a-z\-]+)/$',
views.get_speaker_by_id, name='get_speaker_by_id_url')
这是显示演讲者姓名列表的模板
speakers.html
{% for speaker in all_speakers_list%}
<div class="container">
<div class="row">
<div class="col-sm-6">
<a href="{% url 'get_speaker_by_id_url' speaker.speaker_id %}">{{ speaker.greek_name }}</a>
</div>
</div>
</div>
{% endfor %}
views.py
get_speaker_by_id(request, id_speaker):
''' Get speaker info by id '''
requested_speaker = Speaker.objects.get(speaker_id=id_speaker)
template = loader.get_template('greekparliament/speaker.html')
context = {
'requested_speaker': requested_speaker
}
return HttpResponse(template.render(context, request))
models.py
class Speaker(models.Model):
speaker_id = models.CharField(max_length=200, default='')
english_name = models.CharField(max_length=200, default='', blank=True)
image = models.CharField(max_length=200, default='', blank=True)
email = models.EmailField(max_length=254, default='', blank=True)
wiki_el = models.URLField(max_length=200, default='', blank=True)
twitter = models.URLField(max_length=200, default='', blank=True)
greek_name = models.CharField(max_length=200, default='')
wiki_en = models.URLField(max_length=200, default='', blank=True)
website = models.URLField(max_length=200, default='', blank=True)
当我们看到如下错误时
get_speaker_by_id() got an unexpected keyword argument 'id_speaker'
我们可以清楚地看到它正在寻找一个名为 id_speaker
.
从您发布的 views.py
文件的代码中,我可以清楚地看到传递了参数 id_speaker
。因此,只有一件事可能会产生该错误,那就是 您已经在 views.py
文件中多次定义函数 get_speaker_by_id()
。
P.S。
通过以下已实施最佳实践的代码更改函数 get_speaker_by_id()
的代码。
from django.shortcuts import render
...
def get_speaker_by_id(request, id_speaker):
"""
Get speaker info by id <You should always write doc>
For example, you can follow numpy guidelines on how to
write docs - https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
Parameters
----------
request
Django request that will come from http
id_speaker: str
Id of the speaker
"""
# I think you should handle `DoesNotExist` error here or it will crash
# with an Internal Server Error when id_speaker does not exists in db
requested_speaker = Speaker.objects.get(speaker_id=id_speaker)
context = {
'requested_speaker': requested_speaker
}
return render(request, "greekparliament/speaker.html", context)