2017-07-31 65 views
0

我使用python 2.7和django 1.8。在django的html中無法顯示產品評論的模型

我創建了一個產品評論模型,在我的電子商務網站中進行了評分。我的模型是正確的,但我無法理解如何在views.py中創建函數,以及如何爲html創建模板。

我已經添加了我的views.py功能,但我不知道該寫什麼模板。

models.py(未全部示出)

class Product(models.Model): 
    title = models.CharField(max_length=120) 
    description = models.TextField(blank=True, null=True) 
    price = models.DecimalField(decimal_places=2, max_digits=20) 
    active = models.BooleanField(default=True) 
    categories = models.ManyToManyField('Category', blank=True) 
    default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True) 

objects = ProductManager() 

class Meta: 
    ordering = ["-title"] 

    def __unicode__(self): #def __str__(self): 
     return self.title 

    def get_absolute_url(self): 
     return reverse("product_detail", kwargs={"pk": self.pk}) 

    def get_image_url(self): 
     img = self.productimage_set.first() 
     if img: 
      return img.image.url 
     return img #None 

    def average_rating(self): 
     all_rating = map(lambda x: x.rating, self.review_set.all()) 
     return np.mean(all_rating) 

class Review(models.Model): 
    RATING_CHOICES = (
     (1, '1'), 
     (2,'2'), 
     (3,'3'), 
     (4,'4'), 
     (5,'5'), 
    ) 
    product = models.ForeignKey(Product) 
    pub_date = models.DateTimeField('date published') 
    user_name = models.CharField(max_length=100) 
    comment = models.CharField(max_length=200) 
    rating = models.IntegerField(choices=RATING_CHOICES) 

我views.py(未全部示出)

class ProductListView(FilterMixin, ListView): 
    model = Product 
    queryset = Product.objects.all() 
    filter_class = ProductFilter 


    def get_context_data(self, *args, **kwargs): 
     context = super(ProductListView, self).get_context_data(*args, **kwargs) 
     context["now"] = timezone.now() 
     context["query"] = self.request.GET.get("q") #None 
     context["filter_form"] = ProductFilterForm(data=self.request.GET or None) 
     return context 

    def get_queryset(self, *args, **kwargs): 
     qs = super(ProductListView, self).get_queryset(*args, **kwargs) 
     query = self.request.GET.get("q") 
     if query: 
      qs = self.model.objects.filter(
       Q(title__icontains=query) | 
       Q(description__icontains=query) 
       ) 
      try: 
       qs2 = self.model.objects.filter(
        Q(price=query) 
       ) 
       qs = (qs | qs2).distinct() 
      except: 
       pass 
     return qs 


def review_list(request): 
    latest_review_list = Review.objects.order_by('-pub_date')[:9] 
    context = {'latest_review_list':latest_review_list} 
    return render(request, 'products/review_list.html', context) 

def review_detail(request, review_id): 
    review = get_object_or_404(Review, pk=review_id) 
    return render(request, 'products/review_detail.html', {'review': review}) 

回答

1

所以,在你的環境下,你要生成一個列表的Review對象爲latest_review_list,因此在您的模板中,您可以通過{{ latest_review_list }}訪問它,並且可以像遍歷它一樣:

{% for review in latest_review_list %} 
    {{ review.field_name }} 
{% endfor %} 

然後您的review_detail視圖使用review作爲上下文數據,因此您只需使用{{ review }}即可訪問它。

我不知道你的計劃是什麼ProductListView,但你可以在template_name屬性添加到這樣的:

class ProductListView(FilterMixin, ListView): 
    template_name = '/my_templates/product-list.html' 

你會使用{{ object }}除非你重寫訪問該視圖中的對象context_object_name財產上的觀點:

class ProductListView(FilterMixin, ListView): 
    context_object_name = 'product_list' 

然後,你可以在模板訪問諸如{{ product_list }}列表。

相關問題