2017-09-21 26 views
1

我有一个模板,显示发言人名称列表,我想要点击这些网址并进入发言者页面,我通过一个唯一的ID看起来是这样的 “832fc2ca-787f-484B-B815-f82959607311”,问题是,我得到的错误Django有一个意想不到的关键字参数'id_speaker'

get_speaker_by_id()得到了一个意想不到的关键字参数 'id_speaker'

我觉得问题在urls.py或speakers.html href中是ether。我看着每一个相关的问题,但我无法提交解决方案。

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)) 

模型模板.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) 
+1

你可以确定你还没有在views.py文件中多次定义'get_speaker_by_id()'吗?您可能有多次定义'get_speaker_by_id()'的可能性,并且在第二次您没有定义任何'id_speaker'参数 –

+0

是的!我不相信我犯了这个错误。非常感谢你。也许发布您的这个答案,以便我可以将其标记为解决方案? – kpapadop

回答

1

当我们看到下面的错误

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) 
相关问题