Django динамическая фильтрация, передавая слаг из шаблона - PullRequest
0 голосов
/ 24 октября 2018

Итак, я прочитал эту статью о динамической фильтрации в Django; Динамическая фильтрация

Несмотря на то, что у меня что-то работало, мне нужно было два одинаковых представления, одно для отображения всех различных категорий с их слагом в качестве параметра, и второе представление для отображения всех сообщений из всех категорий безпараметр.

Как я могу использовать один ListView и передать пустой параметр из шаблона, чтобы показать все сообщения из всех категорий в списке?

Или это вообще возможно?

urls.py

urlpatterns = [
  path('', views.PostListView.as_view(), name='index'),
  path('<slug:slug>/', views.PostbyCategoryListView.as_view(), name="category"),
]

views.py

class PostListView(ListView):
  model = Post
  template_name = 'index.html'

class PostbyCategoryListView(ListView):
  model = Post
  template_name = 'index.html'

  def get_queryset(self):
    self.category = get_object_or_404(Category, slug=self.kwargs['slug'])

    return Post.objects.filter(category=self.category)

index.html

...
  <h6>Categories</h6>
  {% if category_list %}
    <ul>
      <li class="category-item">
        <a href="{% url 'index' %}">All categories</a>
      </li>
      {% for category in category_list %}
        <li class="category-item">
          <a href="{% url 'category' category.slug %}">{{ category.name }}</a>
        </li>
      {% endfor %}
    </ul>
  {% else %}
      <p>No categories</p>
  {% endif %}
...

models.py

class Category(models.Model):
  name = models.CharField(max_length=200)
  slug = models.CharField(max_length=200)

class Post(models.Model):
  category = models.ForeignKey('Category',default=1, on_delete=models.SET_NULL, null=True, related_name="posts")
  title = models.CharField(max_length=200)
  content = models.TextField(max_length=2000)
...