Django - 在带有DetailViews的urls.py中多个<pk>

时间:2016-02-22 14:44:36

标签: python django

我正在尝试使用Django Generic display views构建脚本。

我的urls.py

url(r'^page/(?P<pk>[0-9]+)/$', PageDetails.as_view(), name='page-details'),

我的views.py

class PageDetails(DetailView):
    model = Pages

    def get_context_data(self, **kwargs):
        context = super(PageDetails, self).get_context_data(**kwargs)
        return context

问题 如何在我的网址中设置多个<pk>

url(r'^page/(?P<pk>[0-9]+)/subpage/(?P<pk>[0-9]+)$', PageDetails.as_view(), name='page-details'),

在我的观看中,我需要从第一个和第二个<pk>获取数据。

2 个答案:

答案 0 :(得分:3)

将网址中的第二个pk参数更改为其他参数,例如pk_alt

^page/(?P<pk>[0-9]+)/subpage/(?P<pk_alt>[0-9]+)$

url参数pk_alt将在您的views函数中作为self.kwargs字典的一部分提供,因此您可以使用以下命令访问它:

self.kwargs.get('pk_alt', '')

然后,您可以将视图更新为以下内容:

class PageDetails(DetailView):
    model = Pages

    def get_context_data(self, **kwargs):
        context = super(PageDetails, self).get_context_data(**kwargs)
        page_alt = Pages.objects.get(id=self.kwargs.get('pk_alt', ''))
        context['page_alt'] = page_alt
        return context

然后,您就可以使用{{ page_alt }}

访问模板中的替代模型

答案 1 :(得分:0)

如果您在网址中需要两个参数,请尝试以下方法:

url(r'^page/(?P<pk_1>[0-9]+)/subpage/(?P<pk_2>[0-9]+)$', PageDetails.as_view(), name='page-details'),

然后,pk_1pk_2可用kwargs