我正在尝试渲染电影的网址,点击其他众多电影。网址应采用格式 网址/电影名称。但是,我收到此错误
movie_detail() got an unexpected keyword argument 'movie_name'
请帮助我......正如你所看到的,我对Django很新。
查看代码:
def movie_detail(request, movie_name):
movieneed = movies.objects.get(title = movie_name)
movieneed = movieneed.replace("_", " ")
return render(request, 'app/movie.html', {'movie':movieneed})
模板代码:
{% for movie in movies %}
<li data-id="{{ movie.id }}"><span class="title">
<a href="{% url "movie" movie_name=movie.movie_name %}">
{{ movie.title }}</a></span> ({{ movie.year }}) - {{ movie.genre}}<a class="delete">X</a></li>
{% endfor %}
网址代码:
url(r'^(?P<movie_name>)/$', views.movie_detail, name='movie'),
答案 0 :(得分:0)
我认为问题出在url正则表达式上。阅读此doc,可能会有帮助。
url(r'^(?P<movie_name>)/$', views.movie_detail, name='movie'),
要:
url(r'^(?P<movie_name>[\w-]+)/$', views.movie_detail, name='movie'),
命名组¶
上面的例子使用了简单的,未命名的正则表达式组 (通过括号)捕获URL的位并将其作为传递 视图的位置参数。在更高级的用法中,它是可能的 使用命名的正则表达式组来捕获URL位并传递 它们作为视图的关键字参数。
在Python正则表达式中,命名为regular-expression的语法 groups是(?Ppattern),其中name是组的名称和 模式是一种匹配的模式。
答案 1 :(得分:0)
您可能想要更改slug field网址中的电影名称,slugs是将任意字符串转换为有效网址字符串的特别适合的字段
至于你的问题,你的网址没有得到正确匹配,试试这个:
url(r'^(?P<movie_name>[-\w]+)/$', views.movie_detail, name='movie'),
答案 2 :(得分:0)
通常情况下,该异常意味着您的movie_name
函数中没有movie_detail
参数,但显然您可以这样做。
我不是肯定的,但我认为问题可能是你实际上没有任何东西要匹配。例如,假设您只允许带有字母,数字和连字符的电影标题(没有标点符号,空格等),那么您需要使用这样的正则表达式:
url(r'^(?P<movie_name>[-\w]+)/$', views.movie_detail, name='movie')