This comes down to a misunderstanding of what happens with the / character
in URLs and how to use _lookup. I don't know that I have good examples for
how to use _lookup, so I can't help there, but the other part I can explain:

TG separates the URL based on the / character. It goes to the top most
controller (RootController), and says "Do you know how to handle /media".
The RootController has a MediaController named "media", so it goes to that
controller and asks about the next item: news. Since that controller has a
NewsController named "news", it goes to the NewsController and asks it how
to handle the next part.

You have a method named index, so whenever the next part is named "index",
it passes everything to that method. That covers "/index/<value-of-param>"
and "index?url=<value-of-param>". If there is nothing after the final / TG
assumes you want to get the index method called, so uses that method. That
covers "news/" and even "news?url=<value-of-param>" since there's a hidden
/ between "news" and "?url=" (that's how TG interprets it).

The final one, though, doesn't cover any of these cases.
"news/<value-of-param>" doesn't actually match anything. NewsController is
asked "do you have any attribute named <value-of-param>" and it doesn't, so
it can't process it. It returns a 404. What you would need to do is add a
method named _lookup() that would then tell TG that the index method knows
how to handle <value-of-param>.

As I said, I don't have examples to share for this right now, so I can't do
much to give code. I'm sorry. But at least this provides an explanation for
what to do next.

On Tue, Jul 7, 2015 at 2:08 PM Raj <[email protected]> wrote:

> Hi,
> I have a TG app with following *controllers*:
>
>    - RootController
>    - MediaController
>          - News Controller
>
> In the RootController i have added subcontroller as *media*
> =MediaController()
> In MediaController i have added *news*=NewsController()
>
> NewsController is having an index() method with a parameter named 'url'
>
> The NewsController()->index() page is displaying when the following URLs
> are invoked
>
>    - http://localhost:8080/media/news/
>    - http://localhost:8080/media/news/index*/<value-of-url-param>*
>    - http://localhost:8080/media/news/index*?url=<value-of-url-param>*
>    - http://localhost:8080/media/news*?url=<value-of-url-param>*
>
> But the following URL shows a* 404 error*
>
>    - http://localhost:8080/media/news*/<value-of-url-param>*
>
> I am expecting *this should display the same result* as of the URL
> http://localhost:8080/media/news*/index/<value-of-url-param>*
> What is happening while removing *index *from URL?
>
> What is the solution?
>
> Regards,
> Raj
>
> --
> You received this message because you are subscribed to the Google Groups
> "TurboGears" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/turbogears.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/turbogears.
For more options, visit https://groups.google.com/d/optout.

Reply via email to