我可以在Web2Py中包含部分视图,将特定变量传递给它吗?

时间:2012-03-12 20:49:58

标签: python django view partial-views web2py

我有时需要在Web2Py中使用部分视图,但我需要将一些特定变量传递给他们。在Django中它看起来像这样:

{% include "image.html" with caption="Me" source="http://example.com/img.png" %}

对于Web2Py,我可以做类似的事情:

{{ include "image.html" }}

但是在@ {3}}中甚至没有提到将变量传递给部分视图(或者我遗漏了一些非常明显的东西)。

用例就是降低视图的复杂性(并实现DRY规则)并在循环中显示一些复杂的内容(例如图像,复杂的容器等)。

我不想使用我自己的标签/功能 - 我需要快速简单的东西,只是包含具有特定变量的局部视图。同样可以在Django或许多其他Web框架中完成。它是否可能,或者由于Web2Py的架构,它是相当不可能/费力的?

请告诉我这是否可以在web2py中使用,或者我是否应该创建自己的标记以在视图中使用它(如果是这样,最简单/最简单的方法是什么?)。

感谢。

3 个答案:

答案 0 :(得分:5)

Interrobang的答案是正确的 - 控制器返回的变量即使在包含(以及扩展)视图中也可用。所以,你可以这样做:

在mycontroller.py中:

def myfunc():
    return dict(caption='Me', source='http://example.com/img.png')

然后在/views/mycontroller/myfunc.html:

{{include 'image.html'}}

在这种情况下,captionsource将在image.html视图中提供。而不是从控制器返回captionsource,另一个选项只是在include指令之前的视图中定义它们:

{{caption = 'Me'
  source = 'http://example.com/img.png'}}
{{include 'image.html'}}

答案 1 :(得分:2)

来自the book

  

值得指出的是,返回的变量   控制器功能不仅可以在功能的主要部分使用   查看,但也包括所有扩展和包含的视图。

除非我误解你的问题,否则你不必专门传递变量 - 相反,只需正常使用它们。

答案 2 :(得分:0)

详细说明安东尼的回答, 如果需要将其他变量传递给视图,只需将它们包含在返回字典中即可。 在我当前的项目中,我传递了一大堆要在视图中使用的变量。

return dict(maxsize=5, message='hello world', fadetimeout=10, warning=0)

此外,如果您需要在网络中的多个视图中访问某些值,您可以将它们存储在会话中。

session.some_var_i_need_in_multiple_views = ['one', 'two', 'three']

然后在视图中访问它:

{{=H3(session.some_var_i_need_in_multiple_views[0])}}