0

我有一个作为最终用户预订者的应用程序;它基本上是一种调用各种api(BookerApp)的形式。它使用两个主要的 API,但方式不同;它调用谷歌获取地理位置(检索经纬度数据)以通过第二个 api。问题是我需要在主 WebsiteApp 及其后续模板中使用此应用程序,但对外观(模板)稍作修改。我知道我可以在网站应用程序中重复 CBV 并修改领先的渲染模板文件;但想知道是否有更好的 DRY 方法?这是当前的结构

Project folder >
|___ MainProject
          |__ settings.py
          |__ urls.py
          |__ settings.py

|___ WebsiteApp
          |__ Templates
          |__ views.py <----- repeat the same CBV (found in booker) to here with DRY method
          |__ urls.py
          |__ etc..

|___ BookerApp
          |__ Templates
          |__ views.py <--- CBV held here
          |__ etc..

|___ Static

我希望这是有道理的; 我知道我的项目到处都是,欢迎提出任何建议。

本质上,Booker 中的应用程序基本上是一个复杂的表单,我希望能够在其他模板中使用它(主要保存在 WebsiteApp 文件夹中,而不必在该特定视图文件中重复 CBV。

4

1 回答 1

1

当然你可以通过使用继承。创建自定义类

class Obect(object):

然后覆盖 cbv 中的对象类中的任何标准方法

我通常做的是上面的,然后让模板视图继承我的自定义类并说通过。然后我在我新创建的类中使用这个类来获取特定的 url。

为了更进一步,每个 cbv 都有一个获取上下文数据的方法。然后传递给 render to response 方法。您的获取上下文数据可以传递不同的 kwargs 以在渲染响应中呈现动态内容。因此,就您而言,可以仅传递网站 kwarg,它将在渲染中捕获以响应并仅显示与网站相关的上下文

归根结底,您只是在处理 python 类并了解 cbv 中方法的请求和响应周期。ccbv.co.uk 很适合这个。

我很高兴为您详细说明这一点。

于 2020-06-19T15:12:15.460 回答