2017-09-24 47 views
0

I'like代表news_list的名單,結果應該像使用2個循環以下樣式: 組別 - info_record 1 - info_record 2 產品組別 - info_record 3的Django + HTML模板無法顯示正確的方式

問題是,內部循環{%for p_list.p.name%}總是沒有任何事情發生,同時可以正確檢索外部循環{%for p_category%}。

HTML模板文件如下所示,

{% block content %} 
    <div class = "container"> 
    {% for p in p_category %} 
     <div class = "row" > 
      ......... {{p}} 
      </br> 
     </div> 
     {% for m in p_list.p.name %} 
     <div calss ="row"> 
      .. <a href = "/pubinfo/{{m.slug}}" > {{m.title}} - [  {{m.created}}] </a> 
     </div> 
     {% endfor %} 
    {% endfor %} 
</div> 
{% endblock %} 

視圖文件被如下所示,

from django.shortcuts import render 
from datetime import datetime 
from .models import Category 
from .models import PostInfo 


def list_all(request): 

post_categories = Category.objects.all() 
post_lists ={} 

for cate in post_categories: 

    post_lists[cate.name] = PostInfo.objects.all().filter(category = cate) 

import pdb; pdb.set_trace() 

return render(request, 'pub_post.html', {'p_category': post_lists.keys(), "p_list": post_lists}) 

模型文件如下所示,

from django.db import models 
from django.contrib.auth.models import User 

# Create your models here. 

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

    class Meta: 
     ordering = ('name',) 
     verbose_name = 'category' 
     verbose_name_plural = 'categories' 
    def __str__(self): 
    return self.name 

class PostInfo(models.Model): 
    title = models.CharField(max_length=200, 
          db_index=True) 
    slug = models.SlugField(max_length=200, 
          db_index=True, 
          unique=True) 
    content = models.TextField(blank=True, 
          null=True) 
    category = models.ForeignKey(Category, 
          related_name='post_category') 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True)  
    created_by = models.ForeignKey(User, related_name='created_by_user') 
    updated_by = models.ForeignKey(User, related_name='updated_by_user') 


    class Meta: 
     ordering = ('updated',) 
     # verbose_name = 'post' 
     # verbose_name_plural = 'posts' 
    def __str__(self): 
     return self.title 

如果有人能給我你的手,很感謝,再次感謝。

回答

0

那是因爲p_list是一本字典。

試試這個:

 {% for key, value in p_list.items %} 
    {% if key == p %} 
    {% for m in value %} 
    <div calss ="row"> 
     .. <a href = "/pubinfo/{{m.slug}}" > {{m.title}} - [  {{m.created}}] </a> 
    </div> 
    {% endfor %} 
    {% endif %} 
    {% endfor %} 

.items轉換成字典(鍵,值)對

更新的列表,你可以用這個替換整個模板,避免上下文變量p_category

{% block content %} 
    <div class = "container"> 
    {% for p, values in p_list.items %} 
    <div class = "row" > 
     ......... {{p}} 
     </br> 
    </div> 
    {% for m in values %} 
    <div calss ="row"> 
     .. <a href = "/pubinfo/{{m.slug}}" > {{m.title}} - [  {{m.created}}] </a> 
    </div> 
    {% endfor %} 
    {% endfor %} 
    </div> 
    {% endblock %}