我可以在Web2Py中包含部分视图,并向其中传递特定的变量吗?

2024-05-13 10:48:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

但是甚至没有提到将变量传递给the documentation内的部分视图(或者我遗漏了一些非常明显的内容)。在

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

我不想使用我自己的标记/函数-我需要一些快速而简单的方法,只需包含带有特定变量的局部视图。类似地,它可以在Django或其他许多web框架中实现。这是可能的吗?还是因为Web2Py的架构,这是不可能的/费力的?在

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

谢谢。在


Tags: django方法标记image视图httpsource内容
3条回答

来自the book

It is also worth pointing out that the variables returned by the controller function are available not only in the function's main view, but in all of its extended and included views as well.

除非我误解了你的问题,否则你不必专门传递变量,只需像平常一样使用它们。在

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

在我的控制器.py公司名称:

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

然后在/views/mycontroller中/myfunc.html公司名称:

^{pr2}$

在这种情况下,caption和{}将在图像.html查看。与从控制器返回captionsource不同,另一个选项只是在include指令之前的视图中定义它们:

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

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

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

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

^{pr2}$

然后在视图中访问它:

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

相关问题 更多 >