将 slug 传递到 ListView URL
Passing slug into ListView URL
我想将 slug 传递给 ListView。但这并不像传递给DetailView那么简单。
那是因为 ListView 没有内置的 slug 支持。
我找到了问题的答案,想与大家分享。
注意:我使用 ManyToMany 字段。
Models.py:
class Article(models.Model):
...
country = models.ManyToManyField('Country', related_name='country', blank=True)
...
class Country(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(unique=True)
urls.py:
urlpatterns = [
path('<country>/', ArticlesListView.as_view(), name='articles-list'),
]
views.py:
from django.shortcuts import get_list_or_404
class ArticlesListView(ListView):
model = Article
template_name = 'articles/articles-list.html'
def get_queryset(self, *args, **kwargs):
return get_list_or_404(Article.objects.all().filter(topic__slug = self.kwargs['topic']))
参考资料link:
https://docs.djangoproject.com/en/3.1/topics/class-based-views/generic-display/#dynamic-filtering
我想将 slug 传递给 ListView。但这并不像传递给DetailView那么简单。
那是因为 ListView 没有内置的 slug 支持。
我找到了问题的答案,想与大家分享。
注意:我使用 ManyToMany 字段。
Models.py:
class Article(models.Model):
...
country = models.ManyToManyField('Country', related_name='country', blank=True)
...
class Country(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(unique=True)
urls.py:
urlpatterns = [
path('<country>/', ArticlesListView.as_view(), name='articles-list'),
]
views.py:
from django.shortcuts import get_list_or_404
class ArticlesListView(ListView):
model = Article
template_name = 'articles/articles-list.html'
def get_queryset(self, *args, **kwargs):
return get_list_or_404(Article.objects.all().filter(topic__slug = self.kwargs['topic']))
参考资料link: https://docs.djangoproject.com/en/3.1/topics/class-based-views/generic-display/#dynamic-filtering