【发布时间】:2018-09-09 18:45:15
【问题描述】:
我正在尝试配置 urls.py 以通过 URL 传递信息。
当 url 匹配“requests/”时,我的主 urls.py 文件包含以下 requests/urls.py
完整的请求/urls.py:
from django.urls import path
from django.conf.urls import include, url
from . import views
urlpatterns = [
path('admin/<id>/', views.RequestQueue),
url('admin/', views.RequestQueue, name="queue"),
url('', views.ps_request, name='requests'),
]
来自views.py:
def RequestQueue(request, id=0):
#handle updates to request status
if request.method == "POST":
request_update = Request.objects.get(pk=id)
form = RequestComplete(request.POST, instance=request_update)
form.save()
pending_requests = Request.objects.filter(status='pending')
context = {'pending_requests' : pending_requests, 'status_form' : RequestComplete}
template_name = 'pending-queue.html'
return render(request, template_name, context)
当我使用以下网址运行开发服务器时:
http://127.0.0.1:8000/requests/admin/10/
“id”的值仍然等于默认值.. 0
不应该更新为网址中数字的值吗?
编辑 - 回溯: 环境:
Request Method: POST
Request URL: http://127.0.0.1:8000/requests/admin/7
Django Version: 2.0.3
Python Version: 3.6.4
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'aboutme',
'contactme',
'experience',
'login',
'psrequest']
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']
Traceback:
File "C:\Users\name\PycharmProjects\user\venv\lib\site-packages\django\core\handlers\exception.py" in inner
35. response = get_response(request)
File "C:\Users\name\PycharmProjects\user\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:\Users\name\PycharmProjects\user\venv\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\name\python\name\psrequest\views.py" in RequestQueue
31. request_update = Request.objects.get(pk=id)
File "C:\Users\name\PycharmProjects\user\venv\lib\site-packages\django\db\models\manager.py" in manager_method
82. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\name\PycharmProjects\user\venv\lib\site-packages\django\db\models\query.py" in get
403. self.model._meta.object_name
Exception Type: DoesNotExist at /requests/admin/7
Exception Value: Request matching query does not exist.
【问题讨论】:
-
您的 url 格式不包含
requests/- 如果您有和include(),请同时显示。 -
现在我仔细观察你已经混淆了
path()和url()。如果您使用的是 Django 2.0,则需要path('admin/<int:id>/', views.RequestQueue), -
我做了其他线程中提到的更改,但看起来我仍然遇到了这个特定代码部分的问题。我看到了 url() 和 path() 之间的区别,但是值仍然没有传递给我的变量。
-
您如何检查
id的值?在您发布的视图中,您仅在POST部分中使用它。您的 URL 中的其他地方可能存在问题。请注意,您的 URL 是用于http://127.0.0.1:8000/requests/admin/10/尾部斜杠。 -
我是 Python 新手,我不明白斜杠的重要性。 Traceback 告诉我以下内容: request_update = Request.objects.get(pk=id) local vars -> id -> 0
标签: python django django-forms django-views