Anthony <abastardi@...> writes:

> 
> 
> Hi James,
>  
> It sounds like you might be thinking of how a PHP app might work, where your 
URL points to a particular .php file, and that file is then processed to 
generate the returned web page. web2py does not work that way. To get a better 
understanding of how web2py does it, I recommend looking at 
http://web2py.com/book/default/chapter/03 and 
http://web2py.com/book/default/chapter/04#Dispatching. If you're coming from 
PHP, you might also look at http://www.web2py.com/AlterEgo/default/show/106.
>  
> In web2py, you don't call (or redirect to) views directly. Instead, all 
requests are handled by controllers (and the functions within the controllers). 
A URL of the form '/app/c/f' calls the function 'f()' in the controller 'c.py' 
in the application 'app'. If f() returns a string, then no view is called, and 
the string is simply returned as the response. If f() returns a Python 
dictionary, then web2py looks for a view file with the same name as the 
function 
(if the controller is 'c.py', web2py expects to find the view file in a folder 
named 'c' inside the 'views' folder). If the URL does not include an extension 
for 'f', then web2py assumes an .html extension for the view file.
>  
> Taking your example, if you want someone to go to 
'different_controller/protected_page', inside your 'controllers' folder, you 
need a 'different_controller.py' file that includes a 'protected_page()' 
function. Assuming it's an HTML page, there should also be a 
'different_controller' folder inside your 'views' folder, and that folder 
should 
include a 'protected_page.html' view file to render the output of the 
'protected_page()' function.
>  
> Note, if you want to redirect someone to a particular page, you cannot simply 
set response.view to a different value -- that will just tell the current 
function to render it's output using a different view -- it will not call the 
function associated with the different view. To redirect, use the 'redirect' 
command (http://web2py.com/book/default/chapter/04#HTTP-and-redirect), and 
specify the page using the URL() function 
(http://web2py.com/book/default/chapter/04#URL).
>  
> Hope that helps.
>  
> Anthony
>  
> 
> On Saturday, March 26, 2011 12:15:24 AM UTC-4, james c. wrote:
> Hi I'm new to web2py. I've made great progress in a few days with my project. 
SUMMARY: for every view I call, I get default.py as the controller. Even if I 
specify app/view/view or app/namediffernt/view I still get default.py as the 
controller. I appreciate any ideas or pointers on what to try. thanks in 
advance, james MORE DETAIL: I've read the documentation and here and tried some 
different approaches. The app is something like this: Anyone can access the 
hello page and sub pages(page1, page2, page3, ... page7) none of these pages 
require log in and present static content. A registered user can log-in and 
access and update contents of a database. In menu.py and (default.py, under def 
index() {   I check if the user is logged-in.  if so the I send them off to the 
protected page, by using logged in, if so they are sent off to their view via: 
response.view='protected_page.html'.  I've also tried 
response.view='different_controller/protected_page' . First I was trying with 
the controller and the view html page having the same name. I read under some 
conditions that may not work so as shown in my example I'm using a controller 
with a different name from the view. I've tried also putting this in menu.py. 
and tried putting {{response.view=different_controller/...ect}} into the 
view.html I also tried using redirect and URL with no success. Every case I 
ended up either breaking the application or the no matter or with default.py. 
(regardless of what controller explicitly specified) If I just put all the 
logic 
in default.py I can probably getting it working. But I would like to understand 
what is going on and structure the application appropriately. Sorry for the 
rambling, but am somewhat sleep deprived from working on this continuously the 
past three days. I appreciate any recommendations on what to look at or try. 
Thanks in advance. James
> 





Thanks Anthony, Jonathan, and Pbreit. Thanks for all your advice, It helped. 
The 
key bits are: 1) the html view is named the same as the function; 2) the html 
view is placed in a separate folder within the views folder and this new folder 
is named the same name as the controller; and 3) use redirect URL.

For anyone that might search at a later time regarding the same:
Within the default.py controller I added code to the function def index(): that 
checks if the user is logged-in and if so then: 

redirect(URL(r=request, c='my_account', f='summary'))

In controllers I created a new controller my_account.py with a function that 
looks something like:

def summary():
   if user is logged in then:
      now=time.ctime()
      return dict(time=now, here='from happy happy my_account land')
   else:
      return dict()

In the views folder, I created a new folder with the same name as the 
controller, my_account. And within the my_account folder, I placed the view 
html 
file with the same name as the function: summary.html. Within the summary.html 
file, in the appropriate places there are two pieces of code within html that 
looks something like:

At <b>{{=time}}</b>, the great and mighty Summary Function has done work and 
sent results to be displayed here {{=here}}.









Reply via email to