我正在尝试在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
路由格式的问题吗?
答案 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