Python Django错误:NoReverseMatch
我正在使用Django 1.10和python 3.4 精确的误差是Python Django错误:NoReverseMatch,python,django,Python,Django,我正在使用Django 1.10和python 3.4 精确的误差是 NoReverseMatch at /movies/movie/Twilight/ Reverse for 'movie-details' with arguments '(8,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['movies/movie/(?P<movie_id>\\d+)|(?P<movie_name>[a-z
NoReverseMatch at /movies/movie/Twilight/
Reverse for 'movie-details' with arguments '(8,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['movies/movie/(?P<movie_id>\\d+)|(?P<movie_name>[a-zA-Z\\ ]+)/$']
这是指moviesrating/views.py中的函数view\u movie:
url/movies/movie/…的用途。。。如果要显示通过名称或id找到的电影,则特定的url模式来自此需求
关键是错误显示,即使没有找到反向匹配,它也会找到正确的url模式,因此我认为该模式不匹配。然后我尝试将行更改为:
{% url 'moviesrating:movie-details' movie.id %}
{% url 'moviesrating:movie-details' movie_id=movie.id movie_name=None %}
{% url 'moviesrating:movie-details' movie.id None %}
{% url 'moviesrating.views.view_movie' movie.id %}
{% url 'moviesrating.views.view_movie' movie_id=movie.id %}
{% url 'moviesrating.views.view_movie' movie_id=movie.id movie_name=None %}
但没有一个成功
在浏览器中查看链接(例如。http://localhost:8081/movies/movie/8)工作正常,所以不是那个页面导致问题
在这一点上,我真的无法理解这个问题,我已经按照中解释的段落阅读了很多已经提出的问题,但没有一个解决了我的问题
如果有什么不清楚或更多的信息是需要的,请让我知道,我会编辑后。谢谢
以下是错误的完整堆栈跟踪:
Environment:
Request Method: GET
Request URL: http://localhost:8081/movies/movie/Twilight/
Django Version: 1.10.1
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'todolist.apps.TodolistConfig',
'moviesrating.apps.MoviesratingConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template C:\Users\fra\Programmazione\Python\myserver\moviesrating\templates\moviesrating\select_movie.html, error at line 12
Reverse for 'movie-details' with arguments '(8,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['movies/movie/(?P<movie_id>\\d+)|(?P<movie_name>[a-zA-Z\\ ]+)/$'] 2 : <html>
3 : <head>
4 : <meta charset="ISO-8859-1">
5 : <title>Choice your movie</title>
6 : </head>
7 : <body>
8 : <h2>Choice of which movie named {{ movies.0.name }} would you see the details</h2>
9 :
10 : <ul>
11 : {% for movie in movies %}
12 : <li> {% url 'moviesrating:movie-details' movie.id %} </li>
13 : <li><a href="{{ movie_url }}">{{ movie.name }} del {{ movie.year }} diretto da {{ movie.director }}</a></li>
14 : {% endfor %}
15 : </ul>
16 : </body>
17 : </html>
18 :
Traceback:
File "C:\Users\fra\Programmazione\Python\myserver\moviesrating\views.py" in view_movie
31. movie = get_object_or_404(Movie, name = movie_name)
File "C:\Program Files (x86)\Python\lib\site-packages\django\shortcuts.py" in get_object_or_404
85. return queryset.get(*args, **kwargs)
File "C:\Program Files (x86)\Python\lib\site-packages\django\db\models\query.py" in get
389. (self.model._meta.object_name, num)
During handling of the above exception (get() returned more than one Movie -- it returned 2!), another exception occurred:
File "C:\Program Files (x86)\Python\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "C:\Program Files (x86)\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Program Files (x86)\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\fra\Programmazione\Python\myserver\moviesrating\views.py" in view_movie
34. return render(request, "moviesrating/select_movie.html", {'movies': movies})
File "C:\Program Files (x86)\Python\lib\site-packages\django\shortcuts.py" in render
30. content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\loader.py" in render_to_string
68. return template.render(context, request)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\backends\django.py" in render
66. return self.template.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render
208. return self._render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\defaulttags.py" in render
209. nodelist.append(node.render_annotated(context))
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\defaulttags.py" in render
439. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Program Files (x86)\Python\lib\site-packages\django\urls\base.py" in reverse
91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "C:\Program Files (x86)\Python\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
392. (lookup_view_s, args, kwargs, len(patterns), patterns)
Exception Type: NoReverseMatch at /movies/movie/Twilight/
Exception Value: Reverse for 'movie-details' with arguments '(8,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['movies/movie/(?P<movie_id>\\d+)|(?P<movie_name>[a-zA-Z\\ ]+)/$']
环境:
请求方法:获取
请求URL:http://localhost:8081/movies/movie/Twilight/
Django版本:1.10.1
Python版本:3.5.2
已安装的应用程序:
['django.contrib.admin',
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
'todolist.apps.TodolistConfig',
'moviesrating.apps.MoviesratingConfig']
已安装的中间件:
['django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xframeoptions中间件']
模板错误:
在模板C:\Users\fra\Programmazione\Python\myserver\moviesrating\templates\moviesrating\select_movie.html中,第12行出现错误
找不到参数为“(8,)”且关键字参数为“{}”的“电影详细信息”的反转。尝试了1个模式:[“movies/movie/(?P\\d+)|(?P[a-zA-Z\\]+)/$”]2:
三:
4 :
5:选择你的电影
6 :
7 :
8:选择名为{{movies.0.name}的电影,您会看到详细信息吗
9 :
10:
11:{%用于电影中的电影%}
12:- {%url'moviesrating:movie details'movie.id%}
13:
14:{%endfor%}
15:
16 :
17 :
18 :
回溯:
视图\电影中的文件“C:\Users\fra\Programmazione\Python\myserver\moviesrating\views.py”
31电影=获取对象或404(电影,名称=电影名称)
get\u object\u或\u 404中的文件“C:\Program Files(x86)\Python\lib\site packages\django\shortcuts.py”
85返回queryset.get(*args,**kwargs)
get中的文件“C:\ProgramFiles(x86)\Python\lib\site packages\django\db\models\query.py”
389(self.model.\u meta.object\u name,num)
在处理上述异常期间(get()返回了多个电影--它返回了2!),发生了另一个异常:
文件“C:\Program Files(x86)\Python\lib\site packages\django\core\handlers\exception.py”位于内部
39响应=获取响应(请求)
文件“C:\ProgramFiles(x86)\Python\lib\site packages\django\core\handlers\base.py”位于\u get\u响应中
187response=self.process\u异常\u由\u中间件(e,请求)
文件“C:\ProgramFiles(x86)\Python\lib\site packages\django\core\handlers\base.py”位于\u get\u响应中
185响应=包装的回调(请求,*回调参数,**回调参数)
视图\电影中的文件“C:\Users\fra\Programmazione\Python\myserver\moviesrating\views.py”
34返回渲染(请求“moviesrating/select_movie.html”,{'movies':movies})
render中的文件“C:\Program Files(x86)\Python\lib\site packages\django\shortcuts.py”
30content=loader.render_to_string(模板名称、上下文、请求、using=using)
render\u to\u字符串中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\loader.py”
68返回template.render(上下文、请求)
render中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\backends\django.py”
66返回self.template.render(上下文)
render中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\base.py”
208返回self.\u呈现(上下文)
文件“C:\Program Files(x86)\Python\lib\site packages\django\template\base.py”在\u render中
199返回self.nodelist.render(上下文)
render中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\base.py”
994位=节点。带注释的渲染(上下文)
render\u注释中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\base.py”
961返回self.render(上下文)
render中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\defaulttags.py”
209nodelist.append(node.render_注释(上下文))
render\u注释中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\base.py”
961返回self.render(上下文)
render中的文件“C:\Program Files(x86)\Python\lib\site packages\django\template\defaulttags.py”
439url=reverse(视图名称,args=args,kwargs=kwargs,当前应用程序=当前应用程序)
文件“C:\Program Files(x86)\Python\lib\site packages\django\url\base.py”的格式相反
91返回强制_文本(iri_到_uri(解析器._反向_,带有_前缀(视图,前缀,*args,**kwargs)))
文件“C:\Program Files(x86)\Python\lib\site packages\django\url\resolvers.py”位于带前缀的\u reverse\u中
392(查找视图、参数、kwargs、len(模式)、模式)
异常类型:NoReverseMatch at/movies/movie/Twilight/
异常值:找不到参数为“(8,)”且关键字参数为“{}”的“电影详细信息”的反转。尝试了1个模式:[“movies/movie/(?P\\d+)|(?P[a-zA-Z\\]+)/$”]
Django的reverse()
{% url 'moviesrating:movie-details' movie.id %}
{% url 'moviesrating:movie-details' movie_id=movie.id movie_name=None %}
{% url 'moviesrating:movie-details' movie.id None %}
{% url 'moviesrating.views.view_movie' movie.id %}
{% url 'moviesrating.views.view_movie' movie_id=movie.id %}
{% url 'moviesrating.views.view_movie' movie_id=movie.id movie_name=None %}
Environment:
Request Method: GET
Request URL: http://localhost:8081/movies/movie/Twilight/
Django Version: 1.10.1
Python Version: 3.5.2
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'todolist.apps.TodolistConfig',
'moviesrating.apps.MoviesratingConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template C:\Users\fra\Programmazione\Python\myserver\moviesrating\templates\moviesrating\select_movie.html, error at line 12
Reverse for 'movie-details' with arguments '(8,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['movies/movie/(?P<movie_id>\\d+)|(?P<movie_name>[a-zA-Z\\ ]+)/$'] 2 : <html>
3 : <head>
4 : <meta charset="ISO-8859-1">
5 : <title>Choice your movie</title>
6 : </head>
7 : <body>
8 : <h2>Choice of which movie named {{ movies.0.name }} would you see the details</h2>
9 :
10 : <ul>
11 : {% for movie in movies %}
12 : <li> {% url 'moviesrating:movie-details' movie.id %} </li>
13 : <li><a href="{{ movie_url }}">{{ movie.name }} del {{ movie.year }} diretto da {{ movie.director }}</a></li>
14 : {% endfor %}
15 : </ul>
16 : </body>
17 : </html>
18 :
Traceback:
File "C:\Users\fra\Programmazione\Python\myserver\moviesrating\views.py" in view_movie
31. movie = get_object_or_404(Movie, name = movie_name)
File "C:\Program Files (x86)\Python\lib\site-packages\django\shortcuts.py" in get_object_or_404
85. return queryset.get(*args, **kwargs)
File "C:\Program Files (x86)\Python\lib\site-packages\django\db\models\query.py" in get
389. (self.model._meta.object_name, num)
During handling of the above exception (get() returned more than one Movie -- it returned 2!), another exception occurred:
File "C:\Program Files (x86)\Python\lib\site-packages\django\core\handlers\exception.py" in inner
39. response = get_response(request)
File "C:\Program Files (x86)\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "C:\Program Files (x86)\Python\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\fra\Programmazione\Python\myserver\moviesrating\views.py" in view_movie
34. return render(request, "moviesrating/select_movie.html", {'movies': movies})
File "C:\Program Files (x86)\Python\lib\site-packages\django\shortcuts.py" in render
30. content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\loader.py" in render_to_string
68. return template.render(context, request)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\backends\django.py" in render
66. return self.template.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render
208. return self._render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in _render
199. return self.nodelist.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render
994. bit = node.render_annotated(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\defaulttags.py" in render
209. nodelist.append(node.render_annotated(context))
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\base.py" in render_annotated
961. return self.render(context)
File "C:\Program Files (x86)\Python\lib\site-packages\django\template\defaulttags.py" in render
439. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Program Files (x86)\Python\lib\site-packages\django\urls\base.py" in reverse
91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "C:\Program Files (x86)\Python\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
392. (lookup_view_s, args, kwargs, len(patterns), patterns)
Exception Type: NoReverseMatch at /movies/movie/Twilight/
Exception Value: Reverse for 'movie-details' with arguments '(8,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['movies/movie/(?P<movie_id>\\d+)|(?P<movie_name>[a-zA-Z\\ ]+)/$']
urlpatterns = [
url(r'^movie/(?P<movie_id>\d+)/$', view_movie, name='movie-details'),
url(r'^movie/(?P<movie_name>[a-zA-Z\ ]+)/$', view_movie, name='movie-details'),
]
def view_movie(request, movie_id=None, movie_name=None):
...
urlpatterns = [
url(r'^movie/(?P<movie_id>[A-z0-9]+)/$', view_movie, name = 'movie-details'),
]
def view_movie(request, movie_id):
try:
int(movie_id)
movie_name = False
except:
movie_name = True
if not movie_name:
movie = get_object_or_404(Movie, pk = movie_id)
elif movie_name:
# etc.
urlpatterns = [
url(r'^movie/((?P<movie_id>\d+)|(?P<movie_name>[a-zA-Z\ ]+))/$', view_movie, name = 'movie-details'),
]
def view_movie(request, movie_id=None, movie_name=None):
if movie_id:
return HttpResponse('1')
if movie_name:
return HttpResponse('2')