url 中的 django 模型字段
django model field in url
我学习 django 已经有一段时间了,但我已经 运行 自己对这个有所了解。两天来我一直在寻找答案,令人恼火的是,我想我在某个阶段偶然发现了它,但直到后来我才意识到我忘记更改模板(到那时我忘记了 post 我阅读以便我可以重新创建它)。
我正在尝试创建一些用户可以注册的东西,然后创建一个 "channel" 来存储他们的东西。我的工作正常,但现在我想使 URL 看起来更好(例如 Github 或 youtube)。
我希望 URL 显示为 "example.com/channels/channel-name" 而不是 "example.com/channels/1"
这是我目前所拥有的:
url:
url(r'^(?P<slug>[\w-]+)/$', channel_views.DetailView.as_view(), name="channel-detail"),
(注意:当 slug 被更改为 (?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
?
让详细视图知道您正在使用 slug 字段的名称
class DetailView(generic.DetailView):
model = Channel
template_name = 'channels/channel-detail.html'
slug_field = 'name'
虽然它在预设中不是唯一的,但可能会给您带来麻烦。
更好的方法是添加一个额外的 slug 字段,并按照您的建议通过 slugify 用 运行 名称填充它,并确保它是唯一的。
查看此处的 get_object() 方法,了解如何使用主键或 slug 选择对象:
http://ccbv.co.uk/projects/Django/1.11/django.views.generic.detail/DetailView/
我学习 django 已经有一段时间了,但我已经 运行 自己对这个有所了解。两天来我一直在寻找答案,令人恼火的是,我想我在某个阶段偶然发现了它,但直到后来我才意识到我忘记更改模板(到那时我忘记了 post 我阅读以便我可以重新创建它)。
我正在尝试创建一些用户可以注册的东西,然后创建一个 "channel" 来存储他们的东西。我的工作正常,但现在我想使 URL 看起来更好(例如 Github 或 youtube)。
我希望 URL 显示为 "example.com/channels/channel-name" 而不是 "example.com/channels/1"
这是我目前所拥有的:
url:
url(r'^(?P<slug>[\w-]+)/$', channel_views.DetailView.as_view(), name="channel-detail"),
(注意:当 slug 被更改为 (?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
?
让详细视图知道您正在使用 slug 字段的名称
class DetailView(generic.DetailView):
model = Channel
template_name = 'channels/channel-detail.html'
slug_field = 'name'
虽然它在预设中不是唯一的,但可能会给您带来麻烦。
更好的方法是添加一个额外的 slug 字段,并按照您的建议通过 slugify 用 运行 名称填充它,并确保它是唯一的。
查看此处的 get_object() 方法,了解如何使用主键或 slug 选择对象:
http://ccbv.co.uk/projects/Django/1.11/django.views.generic.detail/DetailView/