这可能看起来很基本,但是,尽管我可以猜到,您如何在视图中创建视图,或者更准确地说,如何在动态模板中创建动态模板。你看,我有这些 html 块,其中包含某些事物的统计信息。我将如何创建一个返回这些框之一的视图,以便另一个视图可以将它们插入到模板块中?只是有一个返回它的函数是“好的”,还是我“必须”遵循同样functionName(request)
的事情而不是functionName(info1, info2, info3)
像普通函数一样。这似乎是一件很常见的事情,以至于会有某种标准。
问问题
144 次
2 回答
2
这正是自定义模板标签- 特别是包含标签 - 的用途。
于 2012-08-03T19:43:39.680 回答
1
如果我理解你,你基本上是在谈论预填充模板上下文。基本上,您希望在多个视图中出现一些共同的上下文,但您不想为每个视图重复自己。使用基于函数的视图,最好的方法是简单地使用通用方法来处理这个问题:
def add_some_context(context={}):
context['foo'] = 'bar'
return context
def view1(self, request):
context = {
'something1': 'blah',
}
return render_to_response('template1.html', add_some_context(context), context_instance=RequestContext(request))
def view2(self, request):
context = {
'something2': 'blah',
}
return render_to_response('template2.html', add_some_context(context), context_instance=RequestContext(request))
然后,这两个视图都有一个foo
可以使用的上下文变量。使用基于类的视图执行此操作,您可以创建一个 mixin 类:
class MyViewMixin(object):
def get_context_data(self, **kwargs):
context = super(MyViewMixin, self).get_context_data(**kwargs)
context['foo'] = 'bar'
return context
class MyView1(MyViewMixin, DetailView):
...
class MyView2(MyViewMixin, ListView):
...
当需要将它添加到实际模板中时,您可以让每个视图的模板继承自foo
以某种方式实现上下文变量的模板。
如果它应该应用于每个视图,那么上下文处理器更合适,但如果它只是用于少数视图,那么这两种方法会很好地为您服务。
于 2012-08-03T19:52:04.453 回答