无法将变量从应用程序中的另一个模板传递给 Django 主页模板
Cannot pass variables to django home template from another template in app
我的 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
不知道如何解决这个问题
谢谢 :^)
编辑:
对于主页,我实际上只使用模板,在 url 中它看起来像这样:
url(r'^$', TemplateView.as_view(template_name='pages/home.html') , name="home")
我还使用来自 cookiecutter-django 的 cookie-cutter django
我是否也应该在某处为家定义视图?
您在调用 http://127.0.0.1:8000 时是否在请求上下文中传递 posts?
看来你在使用的时候
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 %}
我的 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
不知道如何解决这个问题 谢谢 :^)
编辑:
对于主页,我实际上只使用模板,在 url 中它看起来像这样:
url(r'^$', TemplateView.as_view(template_name='pages/home.html') , name="home")
我还使用来自 cookiecutter-django 的 cookie-cutter django
我是否也应该在某处为家定义视图?
您在调用 http://127.0.0.1:8000 时是否在请求上下文中传递 posts?
看来你在使用的时候
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 %}