首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >url中django模型字段

问url中django模型字段
EN

Stack Overflow用户
提问于 2017-10-24 10:54:56
回答 1查看 1.6K关注 0票数 0

我已经学习django一段时间了,但是我已经把自己弄得一团糟了。我已经找了两天的答案了,我想我是在某个阶段偶然发现的,但后来我才意识到我忘了修改模板(那时我忘了读什么帖子,这样我就可以重新创建它)。

我试图创建一些用户可以注册的东西,然后创建一个“频道”来存储他们的东西。我把它做得很好,但现在我想让它看起来更好看(比如Github或者youtube)。

我希望URL显示为“example.com/channel/channel-name”,而不是“example.com/channel/1”。

到目前为止,这就是我所拥有的:

url:

代码语言:javascript
复制
url(r'^(?P<slug>[\w-]+)/$', channel_views.DetailView.as_view(), name="channel-detail"),

(注:当段塞改为(?P< pk >[0-9]+)时,它会工作)

视图

代码语言:javascript
复制
class DetailView(generic.DetailView):
    model = Channel
    template_name = 'channels/channel-detail.html'

模型

代码语言:javascript
复制
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:

代码语言:javascript
复制
<a class="channel-link text-center" href="{% url 'channels:channel-detail' channel.id %}">{{channel.name}}</a>

我觉得我需要通过slugify运行"name“字段,然后在HTML模板中调用它,而不是channel.id。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-24 13:56:42

让detail视图知道,您使用的名称为段塞字段。

代码语言:javascript
复制
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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46908669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档