Могу ли я включить частичное представление в Web2Py, передав в него определенные переменные? - PullRequest
3 голосов
/ 13 марта 2012

Мне иногда нужно использовать частичные представления в Web2Py , но Мне нужно передать им некоторые конкретные переменные .В Django это выглядело бы так:

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

В случае с Web2Py я могу сделать что-то вроде:

{{ include "image.html" }}

, но нет ни единого упоминания о передаче переменных в частичные представленияв документации (или я упускаю что-то довольно очевидное).

Вариант использования для этого - уменьшение сложности представлений (и реализация правила DRY) и отображение некоторого сложного содержимого в цикле(Например, изображения, сложные контейнеры и т.Точно так же, как это можно сделать в Django или многих других веб-фреймворках.Это вообще возможно, или из-за архитектуры Web2Py это довольно невозможно / трудоемко?

Скажите, пожалуйста, возможно ли это в web2py или мне лучше создать свой собственный тег, чтобы использовать его в представлениях (если так,какой самый простой / простой способ сделать это?).

Спасибо.

Ответы [ 3 ]

5 голосов
/ 13 марта 2012

Ответ 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'}}
2 голосов
/ 13 марта 2012

С книга :

Стоит также отметить, что переменные, возвращаемые функцией контроллера, доступны не только в главном представлении функции, но и во всехего расширенные и включенные представления.

Если я не неправильно понял ваш вопрос, вам не нужно специально передавать переменные - вместо этого просто используйте их как обычно.

0 голосов
/ 24 марта 2012

Чтобы уточнить ответ Энтони, Если вам нужны дополнительные переменные, передаваемые в представление, просто включите их в возвращаемый dict. В моем текущем проекте я передаю целую кучу переменных, которые будут использоваться в представлении.

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])}}
...