Django 自定义 URL 缺少 1 个必需的位置参数
Django custom URL missing 1 required positional argument
我有以下视图(为空测试):
from .forms import Form_Step_1
def register(request, step):
print(step)
在我的 urls.py 我有:
urlpatterns = [
path('login/', views.LoginView.as_view(), name='login'),
path('logout/', views.LogoutView.as_view(), name='logout'),
path('register', register, name='register'),
path('register/', register, name='register'),
path('register?step=<int:step>/', register, name='register'),
]
register
和 register/
效果很好。但是,如果我转到 register?step=1
,则会出现以下错误:
register() missing 1 required positional argument: 'step'
感谢您的帮助
?step=1
部分是而不是部分路径,这是query string [wiki]。这在 request.GET
中编码为 QueryDict
,一个类似字典的对象。
因此路径应该如下所示:
path('register/', register, name='register'),
并且在视图中,您通过以下方式获取数据:
from .forms import Form_Step_1
def register(request):
print(request<b>.GET['step']</b>)
# …
您在 django 中使用 URL 路由的错误做法。
这更清洁和工作:
path('register/step/<int:step>/', register, name='register')
我有以下视图(为空测试):
from .forms import Form_Step_1
def register(request, step):
print(step)
在我的 urls.py 我有:
urlpatterns = [
path('login/', views.LoginView.as_view(), name='login'),
path('logout/', views.LogoutView.as_view(), name='logout'),
path('register', register, name='register'),
path('register/', register, name='register'),
path('register?step=<int:step>/', register, name='register'),
]
register
和 register/
效果很好。但是,如果我转到 register?step=1
,则会出现以下错误:
register() missing 1 required positional argument: 'step'
感谢您的帮助
?step=1
部分是而不是部分路径,这是query string [wiki]。这在 request.GET
中编码为 QueryDict
,一个类似字典的对象。
因此路径应该如下所示:
path('register/', register, name='register'),
并且在视图中,您通过以下方式获取数据:
from .forms import Form_Step_1
def register(request):
print(request<b>.GET['step']</b>)
# …
您在 django 中使用 URL 路由的错误做法。
这更清洁和工作:
path('register/step/<int:step>/', register, name='register')