def render(self, context):
        args = [arg.resolve(context) for arg in self.args]
        kwargs = dict([(smart_str(k, "ascii"), v.resolve(context)) for k, v in self.kwargs.items()])
        view_name = self.view_name.resolve(context)
        urlconf = self.urlconf.resolve(context)

        try:
            url = do_app_reverse(view_name, urlconf, args=args, kwargs=kwargs, current_app=context.current_app)
        except NoReverseMatch:
            if self.asvar is None:
                raise
            url = ""

        if self.asvar:
            context[self.asvar] = url
            return ""
        else:
            return url
    def render(self, context):
        args = [arg.resolve(context) for arg in self.args]
        kwargs = dict([
            (smart_str(k, 'ascii'), v.resolve(context))
            for k, v in self.kwargs.items()])
        view_name = self.view_name.resolve(context)
        urlconf = self.urlconf.resolve(context)

        try:
            url = do_app_reverse(
                view_name, urlconf, args=args, kwargs=kwargs,
                current_app=context.current_app)
        except NoReverseMatch:
            if self.asvar is None:
                raise
            url = ''

        if self.asvar:
            context[self.asvar] = url
            return ''
        else:
            return url
Beispiel #3
0
def render(self, context):
    from django.core.urlresolvers import reverse, NoReverseMatch
    args = [arg.resolve(context) for arg in self.args]
    kwargs = {
        smart_text(k, 'ascii'): v.resolve(context)
        for k, v in self.kwargs.items()
    }

    view_name = self.view_name.resolve(context)

    try:
        current_app = context.request.current_app
    except AttributeError:
        # Change the fallback value to None when the deprecation path for
        # Context.current_app completes in Django 2.0.
        current_app = context.current_app

    # Try to look up the URL twice: once given the view name, and again
    # relative to what we guess is the "main" app. If they both fail,
    # re-raise the NoReverseMatch unless we're using the
    # {% url ... as var %} construct in which case return nothing.
    url = ''

    try:
        url = reverse(view_name,
                      args=args,
                      kwargs=kwargs,
                      current_app=current_app)
    except NoReverseMatch:
        # try external apps
        for urlconf, config in six.iteritems(
                ApplicationWidget._feincms_content_models[0].ALL_APPS_CONFIG):
            partials = view_name.split(':')[1:]
            try:
                url = do_app_reverse(':'.join(partials),
                                     urlconf,
                                     args=args,
                                     kwargs=kwargs,
                                     current_app=context.current_app)
            except NoReverseMatch:
                pass
            else:
                return url

        exc_info = sys.exc_info()
        if settings.SETTINGS_MODULE:
            project_name = settings.SETTINGS_MODULE.split('.')[0]
            try:
                url = reverse(project_name + '.' + view_name,
                              args=args,
                              kwargs=kwargs,
                              current_app=current_app)
            except NoReverseMatch:
                if self.asvar is None:
                    # Re-raise the original exception, not the one with
                    # the path relative to the project. This makes a
                    # better error message.
                    six.reraise(*exc_info)
        else:
            if self.asvar is None:
                raise

    if self.asvar:
        context[self.asvar] = url
        return ''
    else:
        return url
def render(self, context):
    from django.core.urlresolvers import reverse, NoReverseMatch
    args = [arg.resolve(context) for arg in self.args]
    kwargs = {
        smart_text(k, 'ascii'): v.resolve(context)
        for k, v in self.kwargs.items()
    }

    view_name = self.view_name.resolve(context)

    try:
        current_app = context.request.current_app
    except AttributeError:
        # Change the fallback value to None when the deprecation path for
        # Context.current_app completes in Django 2.0.
        current_app = context.current_app

    # Try to look up the URL twice: once given the view name, and again
    # relative to what we guess is the "main" app. If they both fail,
    # re-raise the NoReverseMatch unless we're using the
    # {% url ... as var %} construct in which case return nothing.
    url = ''

    try:
        url = reverse(
            view_name, args=args, kwargs=kwargs, current_app=current_app)
    except NoReverseMatch:
        # try external apps
        for urlconf, config in six.iteritems(
                ApplicationWidget._feincms_content_models[0].ALL_APPS_CONFIG):
            partials = view_name.split(':')[1:]
            try:
                url = do_app_reverse(
                    ':'.join(partials), urlconf, args=args, kwargs=kwargs,
                    current_app=context.current_app)
            except NoReverseMatch:
                pass
            else:
                return url

        exc_info = sys.exc_info()
        if settings.SETTINGS_MODULE:
            project_name = settings.SETTINGS_MODULE.split('.')[0]
            try:
                url = reverse(project_name + '.' + view_name,
                              args=args, kwargs=kwargs,
                              current_app=current_app)
            except NoReverseMatch:
                if self.asvar is None:
                    # Re-raise the original exception, not the one with
                    # the path relative to the project. This makes a
                    # better error message.
                    six.reraise(*exc_info)
        else:
            if self.asvar is None:
                raise

    if self.asvar:
        context[self.asvar] = url
        return ''
    else:
        return url