【问题标题】:Django - Multiple <pk> in urls.py with DetailViewsDjango - 带有 DetailViews 的 urls.py 中的多个 <pk>
【发布时间】:2016-02-22 14:44:35
【问题描述】:

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

我的 urls.py

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

我的意见.py

class PageDetails(DetailView):
    model = Pages

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

问题 我怎样才能像这样在我的网址中设置多个&lt;pk&gt;

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

在我看来,我需要从第一个和第二个&lt;pk&gt; 获取数据。

【问题讨论】:

    标签: python django


    【解决方案1】:

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

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

    url 参数pk_alt 将作为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 }} 访问模板中的替代模型

    【讨论】:

      【解决方案2】:

      如果您在 url 中需要两个参数,试试这个:

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

      那么你有 pk_1pk_2 可用 kwargs

      【讨论】:

        猜你喜欢
        • 2011-12-05
        • 2019-01-14
        • 2013-09-07
        • 2018-02-17
        • 2018-03-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-12
        • 1970-01-01
        相关资源
        最近更新 更多