0

我正在制作一个应用程序,其中一个模型的主键包含斜杠。例如,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 机制的情况下,我想不出一种方法来做到这一点。

4

1 回答 1

0

来自文档

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)])
于 2013-08-23T10:32:16.823 回答