2012-12-23 56 views
0

Django模板存在問題。我想創建一個基本的html,我將用它來顯示帖子。我從視圖中調用一個模板,其中包含一個html文件,該文件擴展了基本html。Django模板包含一個模板,其中包含來自視圖的變量

視圖

def main(request): 
    all_posts = News.objects.all() 
    return render_to_response("index.html", {'all_posts': all_posts}) 

模板 - index.html的

<div id="content"> 
    {% include 'content.html' with posts=all_posts%} 
</div> 

content.html

{% extends "content_base.html" %} 

{% for post in posts %} 
    {% block date_of_post %} {{ post.date }} {% endblock %} 
    {% block post_author %} {{ post.author }} {% endblock %} 
    {% block post %} {{ post.content }} {% endblock %} 
{% endfor %} 

content_base.html

<div class="post"> 
    <h2 class="title"><a href="#">{% block blabla %}{% endblock %}</a></h2> 
    <p class="meta"><span class="date">{% block date_of_post %}{% endblock %}</span><span class="posted">Posted by <a href="#">{% block post_author %}{% endblock %}</a></span></p> 
    <div style="clear: both;">&nbsp;</div> 
    <div class="entry"> 
     <p> 
      {% block post %} {% endblock %} 
     </p>  
     <p class="links"> 
      <a href="#" class="more">Read More</a> 
      <a href="#" title="b0x" class="comments">Comments</a> 
     </p> 
    </div> 
</div> 

但好像我不能通過* all_posts *變量content.html。這裏有什麼問題?難道我做錯了什麼?

在此先感謝。

回答

2

您應該將環路移動到index.html,並直接包括content_base.html。所以index.html就會成爲:

<div id="content"> 
    {% for post in posts %} 
     {% include 'content_base.html' %} 
    {% endfor %} 
</div> 

和content_base.html是

<div class="post"> 
    <h2 class="title"><a href="#">{{ post.title }}</a></h2> 
    <p class="meta"><span class="date">{{ post.date }}</span><span class="posted">Posted by <a href="#">{{{ post.author }}</a></span></p> 
    <div style="clear: both;">&nbsp;</div> 
    <div class="entry"> 
     <p> 
      {{ post.content }} 
     </p>  
     <p class="links"> 
      <a href="#" class="more">Read More</a> 
      <a href="#" title="b0x" class="comments">Comments</a> 
     </p> 
    </div> 
</div> 
+0

您的'content_base.html'中仍有'{endblock%}'標記,請將其刪除。 –

2

您使用的名稱相同的塊,因爲你在一個循環中使用它們:

{% for post in posts %} 
    {% block date_of_post %} {{ post.date }} {% endblock %} 
    {% block post_author %} {{ post.author }} {% endblock %} 
    {% block post %} {{ post.content }} {% endblock %} 
{% endfor %} 

你不能做到這一點。看看here

1

有時候太多的規範化可沒那麼好。你可以簡單地使用index.html,你的所有代碼都可以去那裏(避免不必要的塊)。

<div id="content"> 
    {% for post in all_posts %} 
     <div class="post"> 
      <h2 class="title"><a href="#">{{post.title}}</a></h2> 
      <p class="meta"><span class="date">{{post.date}}</span><span class="posted">Posted by <a href="#">{{post.post_author}}</a></span></p> 
      <div style="clear: both;">&nbsp;</div> 
      <div class="entry"> 
       <p> 
        {{post.content}} 
       </p>  
       <p class="links"> 
        <a href="#" class="more">Read More</a> 
        <a href="#" title="b0x" class="comments">Comments</a> 
       </p> 
      </div> 
     </div> 
    {% endfor %} 
</div> 
+0

感謝您的提示,但我將在大量的頁面中使用content_base.html,所以我必須這樣做;) – mtndesign