2017-08-16 74 views
0

型號:如何在模板中添加類別?

class Category(models.Model): 
    name = models.CharField(max_length=20) 
    slug = models.SlugField(max_length=200, unique=True) 

    def __unicode__(self): 
     return self.name 

class Post(models.Model): 
    title = models.CharField(max_length = 100) 
    content = models.TextField(max_length = 600, default = 'cool') 
    date_of_creating = models.DateTimeField(auto_now=False, auto_now_add=True) 
    image = models.ImageField(
     upload_to=upload_location, 
     null=True, 
     blank=True, 
     height_field="height_field", 
     width_field="width_field" 
     ) 
    height_field = models.IntegerField(default=0) 
    width_field = models.IntegerField(default=0) 
    category = models.ForeignKey('Category') 
    slug = models.SlugField(unique=True, blank=False) 


    def __unicode__(self): 
     return self.title 

瀏覽:

def category(reguest, slug): 
    category = Category.objects.get(slug=slug) 
    post = Post.objects.filter(category=category) 
    html = 'category.html' 
    context = { 
    'category': category, 
    'post': post, 
    } 
    return render(reguest, html, context) 

def listofposts(request): 
    query_set_list = Post.objects.all() 
    context = { 
    "list" : query_set_list, 
    } 
    html = 'base.html' 
    return render(request, html, context) 

我不知道我應該在模板寫的類別來篩選我的職位。 我需要選擇類別並顯示此類別的帖子。我怎樣才能按類別過濾?

回答

1

我相信你問的是如何顯示你的帖子,按類別排列?如果這是你是什麼後,您的模板應該是這個樣子:

template.html

{% if category %} 
{% if post %} 
    {% for c in category %} 
     {% for p in post %} 
      {% if p.category == c %} 
       <div>{{ p.title }}</div> <!-- and whatever else you want to display and however you want to style it I am just giving an example --> 
      {% endif %} 
     {% endfor %} 
    {% endfor %} 
{% endif %} 
{% endif %} 

根據你的意見做了什麼,這是按類別顯示的一種方式。請注意,有更好的方式可以遍歷數據,並將它們組合起來,但是您需要這樣做。所以我希望這可以幫助你!

編輯1

再次閱讀您的問題(我相信有一個編輯)後,我看到你是問如何顯示所選類別的職位。我假設,因爲你有一個slug選擇的類別在URL中。所以確實在視圖中選擇正確的posts。因此,爲了顯示選定category的職位你只需要做到這一點在你的模板:

{% if post %} 
    {% for p in post %} 
     <div>{{ p.title }}</div> <!-- and whatever else you want to display and however you want to style it I am just giving an example --> 
    {% endfor %} 
{% endif %} 

希望這有助於!

+0

非常感謝。我認爲這會更困難。第二個代碼幫助了我。 Спасибодобрыйчеловек) – question1

+0

@ question1非常歡迎您! –

1

您可以嘗試使用Ajax按類別過濾(Tutorial here)。

製作一個包含所有類別的選擇框,然後在選擇新選項時觸發Ajax查詢以選擇該類別中的所有帖子。

+0

謝謝你的有用鏈接。我會嘗試AJAX – question1

+0

@ question1在我最後一年的項目中使用它,非常方便知道它的存在:) –