首页 > 解决方案 > 当我们想要捕获整数或 slug 参数时 URL 抛出错误的路径函数

问题描述

我是 django 2.2.4 的初学者。我试图跟踪 urls.py 文件。

from firstapp import views
from django.contrib import admin
from django.urls import re_path, path

urlpatterns = [
    re_path(r'^admin/$', admin.site.urls),
    re_path(r'^$', views.index),
    path('articles/2003/', views.index),
    path('articles/<int:year>/', views.index),
]

我看到 url http://127.0.0.1:8000/articles/2003/执行views.index。但是,当我运行 url http://127.0.0.1:8000/articles/2005/时,出现错误。

Request URL:    http://127.0.0.1:8000/articles/2005/
Django Version: 2.2.4
Exception Type: TypeError
Exception Value:    
index() got an unexpected keyword argument 'year'

为什么这不起作用?

如上。预计此 ur 将与该行匹配

path('articles/<int:year>/', views.index).

标签: djangodjango-views

解决方案


views.index应该采用一个名为 year 的参数,例如:

def index(request, year):
    ...

现在应该只有

def index(request):
    ....

并且/articles/2003/正在工作,因为您在 url conf 中设置了明确的路径:

    path('articles/2003/', views.index), # matches articles/2003/, calls views.index(request) with no year param
    path('articles/<int:year>/', views.index), # matches articles/2005/, calls views.index(request, year=2005), throws error

删除 的显式路径articles/2003/,将year参数添加到views.index,然后事情应该可以工作了。


推荐阅读