Перенаправить из ListView в другой ListView в Django 2.1 - PullRequest
0 голосов
/ 28 марта 2019

Я борюсь с одной проблемой в течение некоторого времени.Я хотел бы пролистать сайт следующим образом.Домашняя страница со ссылками на категории -> Когда я иду в категории, я бы перечислил все предложения с этими основными категориями.Но также для данной категории я хотел бы иметь возможность фильтровать эти категории по подкатегориям.Сейчас я борюсь с первым шагом.Вот мой код

class HomeView(ListView):

    context_object_name = 'category'
    queryset = Category.objects.all()
    template_name = 'accounts/home.html'

class GetOffersByCategory(ListView):
    model = Offer
    template_name = 'offer/offer_list.html'
    context_object_name="category"

    def get_queryset(self):
        self.category = get_object_or_404(Category,  name=self.kwargs['category'])
        return Offer.objects.filter(category=self.category)

И мои URL

path('', views.HomeView.as_view() ,name='home'),
path('offers/<category>',views.GetOffersByCategory.as_view(),name='offers'),

И мои модели.

class Offer(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(blank=False)
    price = models.IntegerField()
    contact = models.IntegerField()
    photo = models.ImageField(upload_to='offer_images/',blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    category = models.ForeignKey('Category', null=True, blank=True,on_delete=models.CASCADE)
    slug = models.SlugField(max_length=200, db_index=True,default="None")

    def get_absolute_url(self):
        return reverse('offers:offer_detail',args=[self.title, self.slug])

    class Meta:
        ordering = ('title',)
        index_together = (('id', 'slug'),)

    def __str__(self):
        return self.title


class Category(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField()
    parent = models.ForeignKey('self',blank=True, null=True ,related_name='children',on_delete=models.CASCADE)

    class Meta:
        unique_together = ('slug', 'parent',)   
        verbose_name_plural = "categories"        


    def __str__(self):                           
        full_path = [self.name]                  

        k = self.parent                          

        while k is not None:
            full_path.append(k.name)
            k = k.parent

        return ' -> '.join(full_path[::-1])

    def get_absolute_url(self):
        return "/offers/%s/" % self.slug

Основная проблема для меня - работать с URL в шаблонах.Потому что я понимаю такие более простые шаблоны, как {url 'name'}, но не знаю точно, как создать ссылку, например {% 'category:' MyCategoryFromDB '%}.Я не хочу проходить через цикл for, потому что я знаю свои категории.Я надеюсь, что объяснение моей проблемы является правильным и будет решено с вашей помощью:)

1 Ответ

1 голос
/ 28 марта 2019

Вы можете попробовать вот так в accounts/home.html:

{% for category in object_list %}

    {% url 'offers' category.name %}

{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...