One part of my site is a wiki engine. When a page does not exist I want to provide a custom 404 error page containing a link to create a new page. This custom 404 should only be seen in the context of a failed wiki page view.

To implement this logic I simply return (not raise) a HTTPNotFound() object with a custom message containing a link for the new page creation. Unfortunately the links are escaped. How can I force the html links to appear as links ?

Edit: I found a solution form Python Pyramid & Chameleon templating language escapes html

class Literal:
    def __init__(self, s):
        self.s = s
    def __html__(self):
        return self.s

It's very likely that such an object already exists in Pyramid

有帮助吗?

解决方案

Not Found views in Pyramid accept the same predicates as regular views.

config.add_route('wiki', '/wiki/{page}')

@notfound_view_config()
def notfound_view(exc, request):
    """ Generic notfound view for the entire site."""
    return exc

@notfound_view_config(route_name='wiki')
def wiki_notfound_view(exc, request):
    """ Specific notfound for urls matching the wiki pattern."""
    return exc

As far as your escaping issue, that's specific to your templating language. In mako you would use ${ msg | n } and in jinja2 you would use {{ msg | safe }} to turn off auto-escaping on the string.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top