在主键中使用带斜杠的通用视图

时间:2013-08-23 10:21:25

标签: django

我正在创建一个应用程序,其中一个模型的主键包含斜杠。例如,xx/xxxxxxx/xx。这在我编写URL conf时出现问题,因为我不想将其锁定为仅包含一定数量的斜杠,但我希望能够拥有子视图...即

  • http://example.com/xx/xxxxxxx/xx/
  • http://example.com/xx/xxxxxxx/xx/edit/

目前我的urlconf看起来像

programme_patterns = patterns('',
    url(r'^$',
        login_required(views.ProgrammeDetailView.as_view()),
        name='programme_detail'),
    url(r'^edit/$',
        login_required(views.ProgrammeFormView.as_view()),
        name='programme_edit'),
)

urlpatterns = patterns('',
    url(r'^programmes/?P<pk>.*?/.*?/.*?)/',
        include(programme_patterns))
)

在URL中使用主键斜杠也会让我觉得不舒服,因为它不是语义,这应该看起来像一个'目录'而不是三个一窝。

我想知道是否有办法转换URL中使用的主键,例如,用下划线替换斜杠。在没有破坏反向URL机制的情况下,我想不出办法做到这一点。

1 个答案:

答案 0 :(得分:0)

来自docs

  

Model.get_absolute_url()定义一个get_absolute_url()方法来告诉   Django如何计算对象的规范URL。对于来电者,   此方法应该返回一个可用于引用的字符串   通过HTTP传递给对象。

     

例如:

def get_absolute_url(self):
    return "/people/%i/" % self.id 
  

(虽然这段代码是正确而简单的,但它可能不是最多的   以便携的方式编写这种方法。 reverse()函数是   通常是最好的方法。)

     

例如:

def get_absolute_url(self):
    from django.core.urlresolvers import reverse
    return reverse('people.views.details', args=[str(self.id)])