您可能需要考虑使用模板标签。包含标签之类的东西应该可以很好地为您服务(请参阅此处的文档https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/#inclusion-tags)
您可以使用takes_context 参数来传递数据。因此,任何你想在你身上使用包含标签的页面都可以在视图中使用上下文变量“数据”填充该页面,然后这个函数会像这样在它上面拾取
@register.inclusion_tag('/path/to/blog_posts.html', takes_context=True)
def blog_posts(context):
return {
'blog_posts': context['data'],
}
然后在你想要将博客文章拉入的 html 文件中使用
{% blog_posts %}
从任何视图使用。确保你在任何你想使用模板标签的地方设置数据
def example_view(request):
context = {'data': Blog.objects.all()}
return render(request, 'example.html', context)
另一种选择是显式地将它作为这样的参数传入
@register.inclusion_tag('/path/to/blog_posts.html')
def blog_posts(context, data):
return {
'blog_posts': data,
}
然后使用
{% blog_posts data %}
当然,包含标签中使用的 blog_posts.html 文件会执行类似循环数据的操作
<div>
{% for post in blog_posts %}
<p>{{ post.name}}
{% endfor %}
</div>