关于Django网址路由器的问题

时间:2019-06-30 05:23:10

标签: python django django-rest-framework

我正在尝试在Django中制作支持以下URL的URL路由器:

  • http://localhost:8000/location/configuration
  • http://localhost:8000/location/d3d710fcfc1391b0a8182239881b8bf7/configuration
url(r'^locations/configuration$',
    location_config.as_view(), name="location-config"),
url(r'^locations/(?P<location_key>[\w]+)/configuration$',
    location_config.as_view(), name="location-config-uri")

每当我尝试点击http://localhost:8000/location/configuration时,它都会选择第二种URL路由格式,而不是选择第一种。

错误:

  在/ locations / configuration / get()中的

TypeError缺少1个必需项   位置参数:“ location_key”

有人可以帮我解决url路由格式的问题吗?

2 个答案:

答案 0 :(得分:1)

不是,它会选择没有参数的第一个模式,但是您在两个模式中都使用了相同的视图,并且location_config视图具有必需的参数location_key,当第一个模式匹配时不提供网址。这就是错误消息在说什么。

因此,编写另一个不需要location_key参数或更改此视图定义的视图:将默认值添加到参数

def location_config(request, location_key=None):
    ....

现在它不是“ 必需位置参数”。

答案 1 :(得分:0)

django默认情况下使用详细视图时将查找pk。您必须使用get_object()

覆盖它

就您而言

def get_object(self, queryset=None): 
    location_key = self.kwargs.get('location_key')
    obj = Model.objects.get(id=location_key)
    return obj