0

我对 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>

内容.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。这里有什么问题?难道我做错了什么?

提前致谢。

4

3 回答 3

2

您正在使用具有相同名称的块,因为您在循环中使用它们:

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

你不能那样做。看这里

于 2012-12-23T21:48:38.610 回答
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>
于 2012-12-23T21:56:05.407 回答
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>
于 2012-12-23T21:56:36.223 回答