我正在尝试将django项目从django1.4/python2.7更新到django2.2/python3.7。现在,我对python manage.py运行服务器之后的回溯(以及转到页面/uutiset/之后)感到困惑:
Internal Server Error: /uutiset/
Traceback (most recent call last):
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\contrib\auth\decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\miettinj\osakeekstra\extranet\views.py", line 190, in uutiset
return render(request, 'hello.html')
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\shortcuts.py", line 36, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\template\base.py", line 171, in render
return self._render(context)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\template\base.py", line 163, in _render
return self.nodelist.render(context)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\template\base.py", line 937, in render
bit = node.render_annotated(context)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\template\base.py", line 904, in render_annotated
return self.render(context)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\template\defaulttags.py", line 443, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\urls\base.py", line 90, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "C:\Users\miettinj\verkko\venv\lib\site-packages\django\urls\resolvers.py", line 660, in _reverse_with_prefix
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'uutiset' not found. 'uutiset' is not a valid view function or pattern name.
[03/Nov/2021 14:21:17] "GET /uutiset/ HTTP/1.1" 500 132139
请参阅下面的urls.py、views.py、hello.html和INSTALLED_APPS。
问题一定出在hello.html中。如果我删除这一行
<p><a href="{% url 'extranet:uutiset' %}">Uutiset</a></p>
通过它,我在浏览器页面的url /uutiset/处得到了Hello word,这意味着urls.py应该是正确的,但是html没有将'extranet:uutiset‘理解为一个视图函数。它是使用命令'python manage.py startapp‘创建的普通django应用程序。
urls.py:
from django.conf.urls import url, include
from extranet.views import *
urlpatterns = [
url(r'^uutiset/', uutiset),
]
extranet/views.py:
from django.shortcuts import render
@login_required
def uutiset(request):
return render(request, 'hello.html')
hello.html:
<html>
<head>
</head>
<body>
<h1>Hello World<h1>
<p><a href="{% url 'extranet:uutiset' %}">Uutiset</a></p>
</body>
</html>
settings.py
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
#'django.contrib.admin',
#'extranet.apps.ExtranetConfig',
'extranet',
)
发布于 2021-11-04 09:16:53
更改URL模式,如下所示
url(r'^uutiset/', uutiset, name='uutiset')
因为反向需要命名URL模式,您可以在文档https://docs.djangoproject.com/en/2.2/topics/http/urls/#naming-url-patterns上阅读此内容。
https://stackoverflow.com/questions/69812420
复制相似问题