如何在 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 &nbsp 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 &nbsp person.last_name </a></li>
    % endfor %
</ul>

看看为什么这有效here(寻找蛞蝓)。

【讨论】:

感谢您的明确答复!在 listview 中做呢?能不能也加一下?

以上是关于如何在 Django 通用列表视图类中使用 slugfield 创建链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径

Django中的“slu”是什么?

Django 通用视图:何时使用 ListView 与 DetailView

django:使用搜索自动生成列表视图(管理员风格)

基于 Django 类的视图和通用视图详细信息使用

Django:渲染视图后如何更新模型?