我现在一直在学习django,但我已经用这个来自己跑到地上了。我已经找了两天的答案了,令人讨厌的是,我想我在一个阶段偶然发现了它,但直到后来我才意识到我忘了更改模板(到那时我忘记了我读的帖子,所以我可以重新创造它)。
我试图创建一些用户可以注册然后创建一个"频道"存储他们的东西。我的工作正常,但现在我想让它看起来更好(如Github或youtube)。
我希望网址显示为" example.com/channels/ 频道名称"而不是" example.com/channels/1"
这是我到目前为止所做的:
URL:
url(r'^(?P<slug>[\w-]+)/$', channel_views.DetailView.as_view(), name="channel-detail"),
(注意:当(?P< pk >[0-9]+)
更换了slug时,它可以工作)
视图:
class DetailView(generic.DetailView):
model = Channel
template_name = 'channels/channel-detail.html'
模型
class Channel(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(max_length=150)
def get_absolute_url(self):
return reverse('channels:channel-detail', kwargs={'slug':self.name})
的index.html:
<a class="channel-link text-center" href="{% url 'channels:channel-detail' channel.id %}">{{channel.name}}</a>
我觉得我需要运行&#34;名称&#34;通过slugify字段然后在HTML模板中调用,而不是channel.id
?
答案 0 :(得分:0)
让细节视图知道您正在使用slug字段的名称
class DetailView(generic.DetailView):
model = Channel
template_name = 'channels/channel-detail.html'
slug_field = 'name'
虽然它在预设时不是唯一的,但可能会给您带来麻烦。
最好是添加一个额外的slug字段,正如你所建议的那样,通过slugify运行名称来填充它,并确保它是唯一的。
在这里查看get_object()方法,看看如何使用主键或slugs选择对象:
http://ccbv.co.uk/projects/Django/1.11/django.views.generic.detail/DetailView/