无法从app中的另一个模板将变量传递给django home模板

时间:2016-03-18 02:13:37

标签: python django templates variables cookiecutter-django

我的django(1.9.2)项目中有一个简单的视图,表单和2个模板 传递视图的模板就像一个魅力,迭代并显示所需的值而没有问题。

然而,当我想将此模板包含在另一个模板中时,迭代不会发生。我尝试使用{% include with %},但也许我做得不对。

主页的模板放在项目模板文件夹中,而要包含的模板位于应用程序内

新闻/ 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.html:

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

模板/ 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

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

编辑:

对于Home我实际上只使用模板,在网址中它看起来像这样:

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

同样对于基地我使用来自cookiecutter-django的cookie-cutter django

我是否应该在某处为家定义视图?

2 个答案:

答案 0 :(得分:1)

看来你正在使用

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

您根本没有定义posts。要使其正常运行,您必须将带有posts的上下文传递到此name="home"视图,但您使用的默认as_view未通过posts

我会这样做:

新闻/ urls.py:

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

新闻/ 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.html:

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

模板/ 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 %}

答案 1 :(得分:0)

在调用http://127.0.0.1:8000时,您是否在请求权限上传了帖子