如何在django中组合两个视图?

如何在django中组合两个视图?,django,Django,我想在视图中插入另一个视图 基本上,我使用的是Django过滤器包,值输出直接填充模板,而无需编写任何视图类 我想在当前模板中插入另一个html。 类似于这样的内容:{%include'countsnippet%},但这给了我错误模板不存在的信息 或者,我尝试使用{%include'countsnippet.html%},但这不会调用视图,字段保持为空 我可以使用什么方法包含另一个视图 这是我的countsnippethtml {% block content %} <p> INFT

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

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

我想在当前模板中插入另一个html。 类似于这样的内容:
{%include'countsnippet%}
,但这给了我错误模板不存在的信息

或者,我尝试使用
{%include'countsnippet.html%}
,但这不会调用视图,字段保持为空

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

这是我的countsnippethtml

{% block content %}
<p> INFT : {{ inft }} </p>
{% endblock %}
这是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()} )

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

1.使用标签 您可以使用包含标记将带有上下文的模板集成到另一个模板中,请参见django文档:

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\u view(add\u context=context)(request)
,我不确定以后如何将其嵌入到其他视图中。

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

1.使用标签 您可以使用包含标记将带有上下文的模板集成到另一个模板中,请参见django文档:

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\u view(add\u context=context)(request)
,我不确定以后如何将其嵌入到其他视图中。

我很确定使用extend、include、,我尝试过使用include和block系统,但是我想不出一个方法。我也尝试过实现这里提到的()但我找不到一种适合我想要的方式。请为我列出在
countsnippet.html
的上下文中应该声明哪些变量。当然,countsnippet视图返回一个字典,其中包含以下两个值:
return render(请求,'countsnippet.html',{'inft':inft.count(),'cmpn':cmpn.count(),'extc':extc.count()})
和我的模板片段在问题中提到。谢谢你确定`{'inft':inft.count(),'cmpn':cmpn.count(),'extc':extc.count()}`是在父视图中声明的吗?我很确定,在使用extend、include和block节之间,您可以完成所需的任务。我尝试过使用include和block系统,但无法找到一种方法。我也尝试过按此处所述实现()但是我找不到一种适合我想要的方式。请为我列出在
countsnippet.html
的上下文中应该声明哪些变量当然,count snippet视图返回一个包含以下两个值的字典:
return render(请求,'countsnippet.html',{inft':inft.count(),'cmpn':cmpn.count(),'extc':extc.count()})
和我的模板片段在问题中提到。谢谢你确定“{'inft':inft.count(),'cmpn':cmpn.count(),'extc':extc.count()}`是否在父视图中声明?我不确定我是否理解您提到的内容,但我无法确定要在何处为当前父类添加数据。如果您能帮助我了解这一点,那将很好。您可以在内联上下文词典中添加数据。在本例中,数据将传递到html项目浏览渲染函数。@jayVasant,我用另一种可能的方法更新了这个问题,根据您的需要,这种方法可能更容易实现。我不确定我是否理解您提到的内容,但我无法确定我将在何处为当前父类添加数据。如果您能帮我弄清楚,那就太好了。哟您可以在内联上下文词典中添加数据。在本例中,数据将通过render函数传递给html模板。@jayVasant,我用另一种可能的方法更新了问题,根据您的需要,这种方法可能更容易实现。