我有Django模板的问题。我想创建一个基本html,我将用它来显示帖子。我从视图中调用了一个模板,其中包含一个html文件,该文件扩展了基本的html。
查看
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;"> </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 。这里有什么问题?难道我做错了什么?
提前致谢。
答案 0 :(得分: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 :(得分: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;"> </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>
答案 2 :(得分: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;"> </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>