在 Django 中通过 URL 传递静态字符串参数(模型选择)?
Pass a static string parameter (a model choice) through URL in Django?
Django 2.0
我有以下型号:
class Visitor(models.Model):
TYPE_CHOICES = (
('P', 'Person'),
('E', 'Employee'),
)
type = models.CharField(choices=TYPE_CHOICES, max_length=1)
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
birth_date = models.DateField()
street_address = models.CharField(max_length=100)
city = models.CharField(max_length=40)
在我的 URL 中,我有以下 URL:
# ex: /my_app/P/visit_information/
path('<str:visitor_type>/visit_information/', views.visit_information, name='visit_information'),
我正在尝试为此编写一些测试,但 运行 遇到了问题。
我希望我的测试只告诉我它是否 return 状态 200:
def test_parent_visit_information_returns_200(self):
"""
visit_information page returns a 200
"""
client = Client()
response = client.get(reverse('visit_information', args={'visitor_type':'P'}))
self.assertEqual(response.status_code, 200)
但我收到以下错误:
visit_information() got an unexpected keyword argument 'visitor_type'
处理反向查找的最佳方法是什么?我怎样才能为它提供 'P' 或 'E',这样它就会 return 200 代码?
我在测试中是否处理 URL 不当?
编辑添加:
如果我尝试 kwargs
而不是 args
我会看到这个错误:
visit_information() got an unexpected keyword argument 'visitor_type'
已编辑以添加视图:
def visit_information(request):
return render(request, 'my_app/visit_information.html', {
})
首先,{'visitor_type':'P'}
是一个字典,所以你应该使用kwargs
,而不是args
:
response = client.get(reverse('visit_information', kwargs={'visitor_type':'P'}))
或者,您可以将 args
与列表一起使用:
response = client.get(reverse('visit_information', args=['P']}))
修复该问题后,您将获得 TypeError
,因为您的 visit_information
视图在其签名中缺少 visitor_type
。应该是:
def visit_information(request, visitor_type):
return render(request, 'my_app/visit_information.html', {})
Django 2.0
我有以下型号:
class Visitor(models.Model):
TYPE_CHOICES = (
('P', 'Person'),
('E', 'Employee'),
)
type = models.CharField(choices=TYPE_CHOICES, max_length=1)
first_name = models.CharField(max_length=40)
last_name = models.CharField(max_length=40)
birth_date = models.DateField()
street_address = models.CharField(max_length=100)
city = models.CharField(max_length=40)
在我的 URL 中,我有以下 URL:
# ex: /my_app/P/visit_information/
path('<str:visitor_type>/visit_information/', views.visit_information, name='visit_information'),
我正在尝试为此编写一些测试,但 运行 遇到了问题。
我希望我的测试只告诉我它是否 return 状态 200:
def test_parent_visit_information_returns_200(self):
"""
visit_information page returns a 200
"""
client = Client()
response = client.get(reverse('visit_information', args={'visitor_type':'P'}))
self.assertEqual(response.status_code, 200)
但我收到以下错误:
visit_information() got an unexpected keyword argument 'visitor_type'
处理反向查找的最佳方法是什么?我怎样才能为它提供 'P' 或 'E',这样它就会 return 200 代码?
我在测试中是否处理 URL 不当?
编辑添加:
如果我尝试 kwargs
而不是 args
我会看到这个错误:
visit_information() got an unexpected keyword argument 'visitor_type'
已编辑以添加视图:
def visit_information(request):
return render(request, 'my_app/visit_information.html', {
})
首先,{'visitor_type':'P'}
是一个字典,所以你应该使用kwargs
,而不是args
:
response = client.get(reverse('visit_information', kwargs={'visitor_type':'P'}))
或者,您可以将 args
与列表一起使用:
response = client.get(reverse('visit_information', args=['P']}))
修复该问题后,您将获得 TypeError
,因为您的 visit_information
视图在其签名中缺少 visitor_type
。应该是:
def visit_information(request, visitor_type):
return render(request, 'my_app/visit_information.html', {})