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