无法从应用程序的另一个模板向Django主页模板传递变量

3
我在我的Django(1.9.2)项目中有一个简单的视图、表单和2个模板。被传递给视图的模板非常有效,可以迭代并显示所需值。
但是,当我想要将此模板包含到另一个模板中时,迭代不会发生。我尝试使用“{% include with %}”,但可能我做错了。
用于主页的模板位于项目模板文件夹中,而要包含的模板位于应用程序内。
news/models.py:
class News(models.Model):
    title = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=100, unique=True)
    body = models.TextField()
    posted = models.DateField(db_index=True, auto_now_add=True)

def __unicode__(self):
    return '%s' % self.title

news/views.py:

from news.models import News
from django.shortcuts import render
from django.template import RequestContext

def news(request):
    posts = News.objects.all()
    return render(request, 'news.html',{'posts':posts })

news/templates/news.html:

{% load i18n %} 
{% block content %}
<h2>News</h2>
    :D
    {% for post in posts %}
        {{ post.title }}
        {{ post.body }}
    {% endfor %}
{% endblock content %}

templates/home.html:

{% extends "base.html" %}
{% load i18n %}
{% block content %}
<section id="portfolio">
    <div class="container">

  {% include "news.html" with posts=posts %}

    </div>
</section>
{% include "footer.html" %}
{% endblock content %}

在检查 http://127.0.0.1:8000/news/ 时一切正常,但在 http://127.0.0.1:8000/ 上只显示了:D。

不知道如何解决这个问题。谢谢:^)

编辑:

对于主页,我实际上只使用模板,在urls中它看起来像这样:

url(r'^$', TemplateView.as_view(template_name='pages/home.html') ,  name="home")

我使用了cookiecutter-django的Cookie-Cutter Django作为基础。我应该在哪里定义主页视图呢?

你的主页视图是什么样子? - Selcuk
请分享您的主页视图。 - Rajesh Yogeshwar
我找不到任何东西 :( 我应该定义它吗? - Jeremi Podlasek
1个回答

2

看起来当您使用

url(r'^$', TemplateView.as_view(template_name='pages/home.html') ,  name="home")

您没有定义posts。要使其工作,您需要将带有posts的上下文传递给此name =“home”视图,但是您正在使用默认的as_view,它不会传递posts

我会这样做:

news / urls.py:

url(r'^$', views.home,  name="home")

news/views.py:

from news.models import News
from django.shortcuts import render
from django.template import RequestContext

def home(request):
   posts = News.objects.all()
   return render(request, 'home.html', {'posts':posts })

news/templates/news.html:

{% load i18n %} 
{% block inner_content %}
<h2>News</h2>
    :D
    {% for post in posts %}
    {{ post.title }}
    {{ post.body }}
    {% endfor %}
{% endblock inner_content %}

templates/home.html:

{% extends "base.html" %}
{% load i18n %}
{% block content %}
<section id="portfolio">
    <div class="container">

  {% include "news.html" with posts=posts %}

    </div>
</section>
{% include "footer.html" %}
{% endblock content %}

{% block content %} 应该改为 {% block inner_content %} ... 和 {% endblock inner_content %}。 - Alberto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接