【问题标题】:Combine views in views.py into a single view?将views.py中的视图合并为一个视图?
【发布时间】:2019-11-29 00:19:41
【问题描述】:

我正在构建一个项目,其中我的 views.py 中有几个视图,我想将它们组合成仪表板格式(并排 4 个视图)。它们足够复杂,因为每个视图都包含许多变量并且有很多逻辑服务器端,我也打算单独在其他地方使用它们。

我的问题是如果我想创建仪表板视图(即我有一个带有标题的基本模板),将views.py 中的单独视图组合成单个视图的最佳方法是什么 /footer,然后在该基础中嵌入 4 个视图)。

我的概念证明是使用正确的变量调用视图并解码呈现的返回,然后将其作为变量传递给模板,最后将其作为安全代码插入。见下文。我的直觉告诉我这是一种糟糕的做法,但我不确定包含/扩展系统是否适合这种用途。

views.py

def view1(request, r1_level, r2_level, d_level, call_code):
    ...
    return render(request,
        'modules/logic/levels/' + call_code + '.html',
        {
            'indicators': indicators,
            'd_level': d_level,
            'prof': prof,
            'a_flag': a_flag
        }
    )

def dashboard(request, level_code):
    view1 = view1(request, r1_level, r2_level, d_level, call_code).content.decode("utf-8")
    ...

    return render(request,
        'dashboard.html',
        {
            'view1': view1,
            ...
        }
    )

dashboard.html

<div id="site-wrapper" class="content">
  <div class='grid-container'>
    <div class="grid-x grid-margin-x">

      <div class="cell small-12 medium-6 large-8">
        ...
      </div>

      <div class="cell small-12 medium-6 large-4">
        {{ view1 | safe }}
      </div>

    </div>
  </div>
</div>

感谢您阅读这个烂摊子!

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    你想要做的事情是可能的,但你必须做一些工作。

    views.py

    def build_view1_data(): # not a view, just a helper function
        dict = {}
        ... build logic here ...
        return dict
    
    def dashboard_view(request):
        context_dict = {
            'view1': build_view1(),
            .... etc.
        }
    
        return render(request, 'template.html', context_dict)
    

    然后您可以使用 {{ view1.somedata }} 访问模板中的所有 view1 数据。此外,当你想实际构建view1时,你可以做同样的事情,并调用build_view1_data函数。

    您还可以构建模板,以便可以在仪表板模板和 view1 模板中添加类似的内容。

    dashboard.html

     {% include 'view1.html' %}
    

    这样你只需要写一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多