我有时需要在Web2Py中使用部分视图,但我需要将一些特定变量传递给他们。在Django中它看起来像这样:
{% include "image.html" with caption="Me" source="http://example.com/img.png" %}
对于Web2Py,我可以做类似的事情:
{{ include "image.html" }}
但是在@ {3}}中甚至没有提到将变量传递给部分视图(或者我遗漏了一些非常明显的东西)。
用例就是降低视图的复杂性(并实现DRY规则)并在循环中显示一些复杂的内容(例如图像,复杂的容器等)。
我不想使用我自己的标签/功能 - 我需要快速简单的东西,只是包含具有特定变量的局部视图。同样可以在Django或许多其他Web框架中完成。它是否可能,或者由于Web2Py的架构,它是相当不可能/费力的?
请告诉我这是否可以在web2py中使用,或者我是否应该创建自己的标记以在视图中使用它(如果是这样,最简单/最简单的方法是什么?)。
感谢。
答案 0 :(得分:5)
Interrobang的答案是正确的 - 控制器返回的变量即使在包含(以及扩展)视图中也可用。所以,你可以这样做:
在mycontroller.py中:
def myfunc():
return dict(caption='Me', source='http://example.com/img.png')
然后在/views/mycontroller/myfunc.html:
{{include 'image.html'}}
在这种情况下,caption
和source
将在image.html视图中提供。而不是从控制器返回caption
和source
,另一个选项只是在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])}}