得到了一个意外的关键字参数“my_id”(动态 URL 路由)
Posted
技术标签:
【中文标题】得到了一个意外的关键字参数“my_id”(动态 URL 路由)【英文标题】:Got an unexpected keyword argument 'my_id' (Dynamic URL Routing) 【发布时间】:2021-07-31 08:13:05 【问题描述】:django 3.2.2
urls.py
from django.contrib import admin
from django.urls import path
from pages.views import home_view, contact_view, about_view
from products.views import product_detail_view, product_create_view, render_initial_data, dynamic_lookup_view
urlpatterns = [
path('products/<int:my_id>/', dynamic_lookup_view, name='product'),
path('', home_view, name='home'),
path('about/', about_view),
path('contact/', contact_view),
path('create/', product_create_view),
path('initial/', render_initial_data),
path('product/', product_detail_view),
path('admin/', admin.site.urls),
]
views.py
from django.shortcuts import render, get_object_or_404
from .forms import ProductForm, RawProducForm
from .models import Product
# Create your views here.
def dynamic_lookup_view(request, my_id):
obj = Product.objects.get(id=my_id)
context =
"object": obj
return render(request, "products/product_detail.html", context)
我想通过以下链接查看产品:
http://127.0.0.1:8000/products/2/
这会返回我:
环境:
Request Method: GET
Request URL: http://127.0.0.1:8000/products/1/
Django Version: 3.2.2
Python Version: 3.8.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'pages',
'products']
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(最近一次调用最后一次): 文件“/home/frank/Dev/cilsa/lib/python3.8/site-packages/django/core/handlers/exception.py”,第 47 行,在内部 响应 = get_response(请求) _get_response 中的文件“/home/frank/Dev/cilsa/lib/python3.8/site-packages/django/core/handlers/base.py”,第 181 行 response = Wrapped_callback(request, *callback_args, **callback_kwargs)
异常类型:/products/1/ 处的 TypeError
异常值:dynamic_lookup_view() 得到了一个意外的关键字参数“my_id”
【问题讨论】:
尝试用def dynamic_lookup_view(request, my_id=None):
替换:def dynamic_lookup_view(request, my_id):
与 None 相同的错误
100% 确信这不是缓存问题 - 你已经杀死了 runserver 并重新创建了?这里没有任何问题。您可以尝试的一件事是将 (request, my_id) 更改为 (request, **kwargs) 然后 print(kwargs) 并查看 my_id 是否进入。
@Trent 我更改了 my_id 并引发了同样的错误。我可以看到其他 url,它只发生在 dynamic_lookup_view 上。我怎样才能杀死运行服务器并重新创建?
重启你的电脑肯定会杀掉runserver,否则在你运行“manage.py runserver”的终端中按Ctrl+C会杀掉它
【参考方案1】:
您已经定义了 dynamic_lookup_view 两次 :) 它会选择最后一个没有“my_id”作为参数的定义。请参阅 products/views.py 的第 26 行。
我向你的仓库添加了一个拉取请求https://github.com/frnkdmn/cilsa/pull/1
【讨论】:
以上是关于得到了一个意外的关键字参数“my_id”(动态 URL 路由)的主要内容,如果未能解决你的问题,请参考以下文章
Scikit 管道参数 - fit() 得到了一个意外的关键字参数“gamma”
SQLAlchemy:execute() 得到了一个意外的关键字参数