我已经学习django一段时间了,但是我已经把自己弄得一团糟了。我已经找了两天的答案了,我想我是在某个阶段偶然发现的,但后来我才意识到我忘了修改模板(那时我忘了读什么帖子,这样我就可以重新创建它)。
我试图创建一些用户可以注册的东西,然后创建一个“频道”来存储他们的东西。我把它做得很好,但现在我想让它看起来更好看(比如Github或者youtube)。
我希望URL显示为“example.com/channel/channel-name”,而不是“example.com/channel/1”。
到目前为止,这就是我所拥有的:
url:
url(r'^(?P<slug>[\w-]+)/$', channel_views.DetailView.as_view(), name="channel-detail"),(注:当段塞改为(?P< pk >[0-9]+)时,它会工作)
视图
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>我觉得我需要通过slugify运行"name“字段,然后在HTML模板中调用它,而不是channel.id。
发布于 2017-10-24 13:56:42
让detail视图知道,您使用的名称为段塞字段。
class DetailView(generic.DetailView):
model = Channel
template_name = 'channels/channel-detail.html'
slug_field = 'name'虽然它并不是唯一的预置,所以可能会引起你的问题。
最好是添加一个额外的弹格字段,正如您建议的那样,通过slugify运行名称来填充它,并确保它是唯一的。
在这里查看get_object()方法,了解如何使用主键或弹格选择对象:
http://ccbv.co.uk/projects/Django/1.11/django.views.generic.detail/DetailView/
https://stackoverflow.com/questions/46908669
复制相似问题