url中的django模型字段

时间:2017-10-24 10:54:57

标签: django django-models django-urls

我现在一直在学习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

1 个答案:

答案 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/