如何在 Django 通用列表视图类中使用 slugfield 创建链接?
Posted
技术标签:
【中文标题】如何在 Django 通用列表视图类中使用 slugfield 创建链接?【英文标题】:How do you create links using slugfield in Django generic listview class? 【发布时间】:2017-11-28 12:45:49 【问题描述】:如何使用 SlugField 为 Django 的 ListView 泛型类的输出创建链接(即 href)?现在我可以使用下面的代码列出数据库中的所有人员,但我希望单击时使用 slug 的链接将显示人员的描述。
models.py
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
slug = models.SlugField(max_length=50)
description = models.TextField()
views.py
class PersonList(ListView):
model = Person
person_list.html
<ul>
% for person in object_list %
<li> person.first_name   person.last_name </li>
% endfor %
</ul>
【问题讨论】:
***.com/questions/15080083/… @hansTheFranz 这个问题是针对通用视图的。 【参考方案1】:您无需在列表视图中执行任何操作。您需要将 URL 添加到 urls.py 并为您的人员创建详细视图。然后在模板中引用 url 并传递 slug:
app/urls.py
:
from . import views
urlpatterns = [
# ... other urls
url(
r'^person/(?P<slug>[a-z0-9-]+)$', # Match this
views.PersonDetailView.as_view(), # Call this view
name='person_detail' # Name to use in template
)
]
app/views.py
:
from django.views import generic
from .models import Person
class PersonDetailView(generic.DetailView):
model = Person
app/templates/app/person_list.html
:
<ul>
% for person in object_list %
<li><a href="% url 'person_detail' slug=person.slug %"> person.first_name   person.last_name </a></li>
% endfor %
</ul>
看看为什么这有效here(寻找蛞蝓)。
【讨论】:
感谢您的明确答复!在 listview 中做呢?能不能也加一下?以上是关于如何在 Django 通用列表视图类中使用 slugfield 创建链接?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径