【问题标题】:Pass a static string parameter (a model choice) through URL in Django?通过 Django 中的 URL 传递静态字符串参数(模型选择)?
【发布时间】:2018-09-26 09:52:08
【问题描述】:

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)

在我的网址中,我有以下网址:

# ex: /my_app/P/visit_information/
path('<str:visitor_type>/visit_information/', views.visit_information, name='visit_information'),

我正在尝试为此编写一些测试,但遇到了问题。

我希望我的测试只告诉我它是否返回状态 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”,这样它会返回 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', {

    })

【问题讨论】:

  • 您是否尝试过传递kwargs 而不是args
  • 是的,我已经尝试过 kwargs 和 args - 都给出了相同的答案。
  • 你能显示 visit_information() 视图吗?
  • 我已经编辑以添加视图 - 这是一个非常非常简单的视图,因为我只是让这个应用程序运行。只是一些 HTML 说“显示视图”

标签: python django django-urls django-testing django-tests


【解决方案1】:

首先,{'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', {})

【讨论】:

  • 感谢您的解释 - 我很感激!对我来说是一个真正的“duh”时刻。再次感谢!
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2011-05-25
  • 2015-11-18
  • 2018-02-18
  • 1970-01-01
相关资源
最近更新 更多