将具有多个id的url从Django 1更改为Django 2

2024-04-19 08:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django 1x中,我可以使用URL中的两个id创建URL,如下所示:

在网址.py在

('^profile/(?P<cpk>[0-9]+)/env/(?P<envid>[0-9]+)/$', views.EnvironmentDetailView.as_view(), name='environment'),

HTML模板

^{pr2}$

在模型.py在

class Environment(models.Model):
    ...
    ...
    def get_absolute_url(self):
            return reverse('myapp:envmanager', args =[self.client.pk])

在视图.py在

class EnvironmentDetailView(generic.DetailView):
    '''Detail view of environment'''
    model = Environment
    pk_url_kwarg ="envid"
    template_name = 'myapp/environment.html'

但当我升级到Django 2.0时,我尝试了:

在网址.py在

path('profile/<int:client_id>/env/<int:pk>/', views.EnvironmentDetailView.as_view(), name='environment'),

html模板

"{% url 'myapp:environment' client_id=environment.client.id pk=environment.id %}"

在视图.py在

class EnvironmentDetailView(generic.DetailView):
    '''Detail view of environment'''
    model = Environment
    pk_url_kwarg ="environment_id"
    template_name = 'myapp/environment.html'

然后得到了这个错误

AttributeError: Generic detail view EnvironmentDetailView must be called with either an object pk or a slug.

如何正确引用带有两个id的URL链接?在


Tags: djangonamepyclientviewidurlenvironment