得到了一个意外的关键字参数“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”

fit() 得到了一个意外的关键字参数“标准”

mean() 得到了一个意外的关键字参数“dtype”!

SQLAlchemy:execute() 得到了一个意外的关键字参数

get() 得到了一个意外的关键字参数“pk”:django

TypeError: line() 得到了一个意外的关键字参数“标记”