Пример #1
0
def technical_500_response(request, exc_type, exc_value, tb):
    """
    Create a technical server error response.  The last three arguments are
    the values returned from sys.exc_info() and friends.
    """
    frames = []
    while tb is not None:
        filename = tb.tb_frame.f_code.co_filename
        function = tb.tb_frame.f_code.co_name
        lineno = tb.tb_lineno - 1
        pre_context_lineno, pre_context, context_line, post_context = _get_lines_from_file(filename, lineno, 7)
        frames.append(
            {
                "tb": tb,
                "filename": filename,
                "function": function,
                "lineno": lineno,
                "vars": tb.tb_frame.f_locals,
                "id": id(tb),
                "pre_context": pre_context,
                "context_line": context_line,
                "post_context": post_context,
                "pre_context_lineno": pre_context_lineno,
            }
        )
        tb = tb.tb_next

    # Turn the settings module into a dict, filtering out anything that
    # matches HIDDEN_SETTINGS along the way.
    settings_dict = {}
    for k in dir(settings):
        if k.isupper():
            if HIDDEN_SETTINGS.search(k):
                settings_dict[k] = "********************"
            else:
                settings_dict[k] = getattr(settings, k)

    t = Template(TECHNICAL_500_TEMPLATE)
    c = Context(
        {
            "exception_type": exc_type.__name__,
            "exception_value": exc_value,
            "frames": frames,
            "lastframe": frames[-1],
            "request": request,
            "request_protocol": os.environ.get("HTTPS") == "on" and "https" or "http",
            "settings": settings_dict,
        }
    )
    return HttpResponseServerError(t.render(c))
Пример #2
0
def technical_404_response(request, exception):
    """
    Create a technical 404 error response.  The exception should be the Http404
    exception.
    """
    try:
        tried = exception.args[0]["tried"]
    except (IndexError, TypeError):
        tried = []

    t = Template(TECHNICAL_404_TEMPLATE)
    c = Context(
        {
            "root_urlconf": settings.ROOT_URLCONF,
            "urlpatterns": tried,
            "reason": str(exception),
            "request": request,
            "request_protocol": os.environ.get("HTTPS") == "on" and "https" or "http",
            "settings": dict([(k, getattr(settings, k)) for k in dir(settings) if k.isupper()]),
        }
    )
    return HttpResponseNotFound(t.render(c))
Пример #3
0
 def render(self, context):
     from django.conf.settings import DEBUG
     if not include_is_allowed(self.filepath):
         if DEBUG:
             return "[Didn't have permission to include file]"
         else:
             return '' # Fail silently for invalid includes.
     try:
         fp = open(self.filepath, 'r')
         output = fp.read()
         fp.close()
     except IOError:
         output = ''
     if self.parsed:
         try:
             t = Template(output)
             return t.render(context)
         except (TemplateSyntaxError, e):
             if DEBUG:
                 return "[Included template had syntax error: %s]" % e
             else:
                 return '' # Fail silently for invalid included templates.
     return output
Пример #4
0
    def get_feed(self, url=None):
        """
        Returns a feedgenerator.DefaultFeed object, fully populated, for
        this feed. Raises FeedDoesNotExist for invalid parameters.
        """
        if url:
            try:
                obj = self.get_object(url.split('/'))
            except (AttributeError, ObjectDoesNotExist):
                raise FeedDoesNotExist
        else:
            obj = None

        current_site = sites.get_current()
        link = self.__get_dynamic_attr('link', obj)
        link = add_domain(current_site.domain, link)

        feed = self.feed_type(
            title = self.__get_dynamic_attr('title', obj),
            link = link,
            description = self.__get_dynamic_attr('description', obj),
            language = LANGUAGE_CODE.decode(),
            feed_url = add_domain(current_site, self.feed_url),
            author_name = self.__get_dynamic_attr('author_name', obj),
            author_link = self.__get_dynamic_attr('author_link', obj),
            author_email = self.__get_dynamic_attr('author_email', obj),
        )

        try:
            title_template = loader.get_template('feeds/%s_title' % self.slug)
        except TemplateDoesNotExist:
            title_template = Template('{{ obj }}')
        try:
            description_template = loader.get_template('feeds/%s_description' % self.slug)
        except TemplateDoesNotExist:
            description_template = Template('{{ obj }}')

        for item in self.__get_dynamic_attr('items', obj):
            link = add_domain(current_site.domain, self.__get_dynamic_attr('item_link', item))
            enc = None
            enc_url = self.__get_dynamic_attr('item_enclosure_url', item)
            if enc_url:
                enc = feedgenerator.Enclosure(
                    url = enc_url.decode('utf-8'),
                    length = str(self.__get_dynamic_attr('item_enclosure_length', item)).decode('utf-8'),
                    mime_type = self.__get_dynamic_attr('item_enclosure_mime_type', item).decode('utf-8'),
                )
            author_name = self.__get_dynamic_attr('item_author_name', item)
            if author_name is not None:
                author_email = self.__get_dynamic_attr('item_author_email', item)
                author_link = self.__get_dynamic_attr('item_author_link', item)
            else:
                author_email = author_link = None
            feed.add_item(
                title = title_template.render(Context({'obj': item, 'site': current_site})).decode('utf-8'),
                link = link,
                description = description_template.render(Context({'obj': item, 'site': current_site})).decode('utf-8'),
                unique_id = link,
                enclosure = enc,
                pubdate = self.__get_dynamic_attr('item_pubdate', item),
                author_name = author_name,
                author_email = author_email,
                author_link = author_link,
            )
        return feed
Пример #5
0
    
try:
    import docutils
except ImportError:
    docutils = None

# simple examples 'cause this isn't actually testing the markup, just
# that the filters work as advertised

### test textile

textile_content = """Paragraph 1

Paragraph 2 with "quotes" and @code@"""

t = Template("{{ textile_content|textile }}")
rendered = t.render(Context(locals())).strip()
if textile:
    assert rendered == """<p>Paragraph 1</p>

<p>Paragraph 2 with &#8220;quotes&#8221; and <code>code</code></p>"""
else:
    assert rendered == textile_content
    
### test markdown

markdown_content = """Paragraph 1

## An h2"""

t = Template("{{ markdown_content|markdown }}")