Django在其他模板中传递render_to_response模板

时间:2015-08-03 14:40:57

标签: python django django-templates views render-to-response

这对于绝对的初学者来说可能是一个问题,因为我对初学者来说相当新。我已经搜索了几个小时以获得足够的解决方案,我不知道还能做什么。

以下问题。我希望有一个显示的视图。例如5个最新条目& 5最新的数据库(只是一个例子)

#views.py
import core.models as coremodels

class LandingView(TemplateView):
    template_name = "base/index.html"

    def index_filtered(request):
        last_ones = coremodels.Startup.objects.all().order_by('-id')[:5]
        first_ones = coremodels.Startup.objects.all().order_by('id')[:5]
        return render_to_response("base/index.html", 
        {'last_ones': last_ones,   'first_ones' : first_ones})  

Index.html显示HTML内容,但不显示循环内容

#index.html

<div class="col-md-6">
    <p> Chosen Items negative:</p>
    {% for startup in last_ones %}
        <li><p>{{ startup.title }}</p></li>
    {% endfor %}
</div>

<div class="col-md-6">
    <p> Chosen Items positive:</p>
    {% for startup in first_ones %}
       <li><p>{{ startup.title }}</p></li>
    {% endfor %}

这是我的问题:

如何让for循环呈现特定内容?

我认为Django show render_to_response in template非常接近我的问题,但我没有看到有效的解决方案。

感谢您的帮助。

克里斯

- 我根据此线程中提供的解决方案编辑了我的代码和问题描述

1 个答案:

答案 0 :(得分:0)

致电base/showlatest.html呈现index.html,而非index.html

负责呈现last_ones的视图应将所有数据(first_onesindex.html)传递给它。

将模板添加到{% include /base/showlatest.html %}

urls.py

更改上面的视图(或创建新视图或修改现有视图,相应地更改return render_to_response("index.html", {'last_ones': last_ones, 'first_ones' : first_ones}) )以将数据传递给它

index.html

概念是视图呈现某个模板(showlatest.html),该模板成为返回客户端浏览器的html页面。 那个是应该接收某个上下文(数据)的模板,以便它可以包含其他可重用的部分(例如include)并正确地渲染它们。

showlatest.html命令只复制当前模板(index.html)内的指定模板(render_to_response)的内容,就好像它是输入的一部分一样。

因此,您需要致电last_ones并将其数据(first_onesshowlatest.html)传递给负责呈现包含class LandingView(TemplateView): template_name = "base/index.html" def get_context_data(self, **kwargs): context = super(LandingView, self).get_context_data(**kwargs) context['last_ones'] = coremodels.Startup.objects.all().order_by('-id')[:5] context['first_ones'] = coremodels.Startup.objects.all().order_by('id')[:5] return context 的模板的每个视图

对于扭曲的措辞感到抱歉,有些事情比解释更容易。 :)

<强>更新

您的上一次编辑澄清您正在使用CBV(基于班级的观点)。

然后你的观点应该是这样的:

id

注意:我个人会避免依赖数据库设置的class Startup(models.Model): ... created_on = models.DateTimeField(auto_now_add=True, editable=False) 来订购记录。

相反,如果您可以更改模型,请添加一个字段以标记创建时间。例如

    def get_context_data(self, **kwargs):
        context = super(LandingView, self).get_context_data(**kwargs)
        qs = coremodels.Startup.objects.all().order_by('created_on')
        context['first_ones'] = qs[:5]
        context['last_ones'] = qs[-5:]
        return context

然后在您的视图中查询可以变为

{{1}}