如何在Django中合并两个视图?

时间:2018-08-14 13:23:01

标签: django

我想在视图中插入另一个视图。

基本上,我使用的是Django过滤器包,值输出直接填充了模板,而无需编写任何视图类。

我想在当前模板中插入另一个html。 像这样:{% include 'countsnippet.html' %},但这给了我错误模板不存在。

或者,我尝试使用{% block content %} <p> INFT : {{ inft }} </p> {% endblock %} ,但这并没有调用视图,并且字段仍然为空。

我可以使用什么方法来包含另一个视图?

这是我的countsnippet html。

url(r'countsnippet/$', countsnippet, name='countsnippet')

我已经查看了countsnippet,其网址如下所示:

 def countsnippet(request):
     checkins = Attendee.objects.filter(checkin=True)
     inft = Attendee.objects.filter(branch='INFT')
     cmpn = Attendee.objects.filter(branch='CMPN')
     mms = Attendee.objects.filter(branch='MMS')
     return render( request, 'search/countsnippet.html', {'inft': 
 (checkins&inft).count(), 'cmpn': (checkins&cmpn).count(), 'mms': 
 (checkins&mms).count()} )

这是Countsnippet视图的代码段:

:style="{ background: `url(${imageSrc}) center` }"

1 个答案:

答案 0 :(得分:0)

您不能将视图直接添加到模板中,因为它将需要一个请求和一个上下文。我认为要解决您的问题,您有两种选择:

1使用包含标记

您可以使用包含标签将具有上下文的模板集成到另一个模板中,请参阅django文档:https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/#inclusion-tags

2。使用包含在视图函数/类内部的视图作为包装器视图的上下文

您可以将“视图”(在这种情况下为带有上下文的生成模板)直接包含到包装器视图的上下文字典中。您可以通过执行以下操作来实现此目的:

# views.py
from django.views.generic import TemplateView
from django.template import Context, Template

# Wrapper view
class WrapperView(TemplateView):
    """
    This is the wrapper view, you include the inline view inside the
    wrapper view get_context_data.
    """
    template_name = "wrapper_template.html"

    def get_context_data(self, **kwargs):
        context = super(WrapperView, self).get_context_data(**kwargs)

        inline_context = {
            'name': 'Steve'
        }
        inline_html_template = Template('inline_template.html')
        inline_view = html_template.render(Context(inline_context))

        context['inline_view'] = inline_view

        # In the wrapper template you can show the html of your inline_view with {{ inline_html|safe }}

        return context

否则,您可以从这样的上下文生成视图,但是它将需要一个请求对象:InlineView.as_view(add_context=context)(request),但我不确定接下来如何将其嵌入到其他视图中。