def reverse(*args, **kwargs): reverse_kwargs = kwargs.get('kwargs', {}) locale = utils.supported_language(reverse_kwargs.pop('locale', translation.get_language())) url = django_reverse(*args, **kwargs) _, path = utils.strip_script_prefix(url) return utils.locale_url(path, locale)
def reverse(*args, **kwargs): reverse_kwargs = kwargs.get('kwargs') or {} locale = utils.supported_language( reverse_kwargs.pop('locale', translation.get_language())) url = django_reverse(*args, **kwargs) _, path = utils.strip_script_prefix(url) return utils.locale_url(path, locale)
def reverse(*args, **kwargs): no_locale = kwargs.pop('no_locale', False) locale = translation.get_language() path = django_reverse(*args, **kwargs) if not locale or no_locale: return path return utils.locale_url(path, utils.supported_language(locale))
def test_locale_url(self): # We'd like to be able to test using settings.FORCE_SCRIPT_NAME, but # the urlresolvers module caches the prefix. script_name = urlresolvers.get_script_prefix() self.assertEqual(script_name + 'en/about/localeurl/', utils.locale_url('/about/localeurl/')) self.assertEqual(script_name + 'en/about/localeurl/', utils.locale_url('/about/localeurl/', 'de')) self.assertEqual(script_name + 'en/about/localeurl/', utils.locale_url('/about/localeurl/', 'en')) self.assertEqual(script_name + 'en/about/localeurl/', utils.locale_url('/about/localeurl/', 'en-us')) self.assertEqual(script_name + 'nl-nl/about/localeurl/', utils.locale_url('/about/localeurl/', 'nl-nl')) self.assertEqual(script_name + 'test/independent/bla/bla', utils.locale_path('/test/independent/bla/bla', 'en'))
def reverse(viewname, urlconf=None, args=[], kwargs={}, prefix=None, current_app=None): kwargs = kwargs or {} locale = kwargs.pop('locale', translation.get_language()) path = django_reverse(viewname, urlconf, args, kwargs, prefix, current_app) if locale == '': return path return utils.locale_url(path, utils.supported_language(locale))
def chlocale(url, locale): """ Changes the URL's locale prefix if the path is not locale-independent. Otherwise removes locale prefix. """ _, path = utils.strip_script_prefix(url) _, path = utils.strip_path(path) return utils.locale_url(path, locale)
def locale_redirect(*args, **kwargs): """ Redirect shortcut with forced locale. """ locale = kwargs.pop('locale') url = reverse(*args, **kwargs) ignored, path = strip_path(url) url = locale_url(path, locale=locale) return redirect(url)
def chlocale(url, locale): """ Changes the URL's locale prefix if the path is not locale-independent. Otherwise removes locale prefix. The URL is expected to have the same script prefix as the current page. """ script_name, path = utils.strip_script_prefix(url) _, path = utils.strip_path(path) return utils.locale_url(path, locale, script_name)
def reverse(*args, **kwargs): reverse_kwargs = kwargs.get('kwargs') or {} prefix = kwargs.get('prefix') or None urlconf = kwargs.get('urlconf') or None if urlconf is None: urlconf = get_urlconf() locale = utils.supported_language(reverse_kwargs.pop( 'locale', translation.get_language())) url = django_reverse(*args, **kwargs) stipped_prefix, path = utils.strip_script_prefix(url, prefix = prefix) return utils.locale_url(path, locale, prefix = prefix, urlconf=urlconf)
def handle_url_module(js_patterns, module_name, prefix="", namespace="", locale_prefix=''): """ Load the module and output all of the patterns Recurse on the included modules """ if isinstance(module_name, basestring): __import__(module_name) root_urls = sys.modules[module_name] patterns = root_urls.urlpatterns elif isinstance(module_name, types.ModuleType): root_urls = module_name patterns = root_urls.urlpatterns else: root_urls = module_name patterns = root_urls for pattern in patterns: if issubclass(pattern.__class__, RegexURLPattern): if pattern.name: pattern_name = u':'.join((namespace, pattern.name)) if \ namespace else pattern.name full_url = prefix + pattern.regex.pattern for chr in ["^", "$"]: full_url = full_url.replace(chr, "") # Handle kwargs, args kwarg_matches = RE_KWARG.findall(full_url) if kwarg_matches: for el in kwarg_matches: # Prepare the output for JS resolver full_url = full_url.replace(el[0], "<%s>" % el[1]) # After processing all kwargs try args args_matches = RE_ARG.findall(full_url) if args_matches: for el in args_matches: # Replace by a empty parameter name full_url = full_url.replace(el, "<>") # Add locale to path if django-localeurl is installed full_url = locale_url("/" + full_url, locale=locale_prefix) js_patterns[pattern_name] = full_url elif issubclass(pattern.__class__, RegexURLResolver): if ALLOWED_NAMESPACES is None: pass elif pattern.namespace not in ALLOWED_NAMESPACES: continue if pattern.urlconf_name: handle_url_module(js_patterns, pattern.urlconf_name, prefix=pattern.regex.pattern, namespace=pattern.namespace, locale_prefix=locale_prefix)
def test_locale_url(self): # We'd like to be able to test using settings.FORCE_SCRIPT_NAME, but # the urlresolvers module caches the prefix. for script_name in ["", "/mountpoint", "/mountpoint/"]: urlresolvers.set_script_prefix(script_name) script_name = script_name.rstrip("/") self.assertEqual(script_name + '/en/about/localeurl/', utils.locale_url('/about/localeurl/')) self.assertEqual(script_name + '/en/about/localeurl/', utils.locale_url('/about/localeurl/', 'de')) self.assertEqual(script_name + '/en/about/localeurl/', utils.locale_url('/about/localeurl/', 'en')) self.assertEqual(script_name + '/en/about/localeurl/', utils.locale_url('/about/localeurl/', 'en-us')) self.assertEqual(script_name + '/nl-nl/about/localeurl/', utils.locale_url('/about/localeurl/', 'nl-nl')) self.assertEqual(script_name + '/test/independent/bla/bla', utils.locale_url('/test/independent/bla/bla', 'en')) self.assertEqual('/dummy/test/independent/bla/bla', utils.locale_url('/test/independent/bla/bla', 'en', '/dummy')) self.assertEqual('/test/independent/bla/bla', utils.locale_url('/test/independent/bla/bla', 'en', ''))
def test_locale_url(self): previous_script_prefix = urlresolvers.get_script_prefix() urlresolvers.set_script_prefix("/blah/") self.assertEqual('/blah/en/about/localeurl/', utils.locale_url('/about/localeurl/')) self.assertEqual('/blah/en/about/localeurl/', utils.locale_url('/about/localeurl/', 'de')) self.assertEqual('/blah/en/about/localeurl/', utils.locale_url('/about/localeurl/', 'en')) self.assertEqual('/blah/en/about/localeurl/', utils.locale_url('/about/localeurl/', 'en-us')) self.assertEqual('/blah/nl-nl/about/localeurl/', utils.locale_url('/about/localeurl/', 'nl-nl')) self.assertEqual('/blah/test/independent/bla/bla', utils.locale_url('/test/independent/bla/bla', 'en')) urlresolvers.set_script_prefix(previous_script_prefix)
def profile_edit(request, username, edit_profile_form=I4PEditProfileForm, template_name='userena/profile_form.html', success_url=None, extra_context=None): """ Custom version of userena's profile edit, with the three following forms: - Profile edition ; - Password update ; - Email update. """ current_user = request.user requested_user = get_object_or_404(User, username__iexact=username) profile = requested_user.get_profile() if not current_user.has_perm('change_profile', profile): return HttpResponseForbidden() user_initial = {'first_name': requested_user.first_name, 'last_name': requested_user.last_name} if not extra_context: extra_context = {} # From userena. form = edit_profile_form(instance=profile, initial=user_initial) # Also pass the password and email forms extra_context.update({'password_form': PasswordChangeForm(user=current_user), 'email_form': ChangeEmailForm(user=current_user), 'profile_form': form} ) if request.method == 'POST': form = edit_profile_form(request.POST, request.FILES, instance=profile, initial=user_initial) if form.is_valid(): profile = form.save() if userena_settings.USERENA_USE_MESSAGES: messages.success(request, _('Your profile has been updated.'), fail_silently=True) if success_url: redirect_to = success_url else: redirect_to = reverse('userena_profile_detail', kwargs={'username': username}) # Ensure the redirect URL locale prefix matches the profile locale _locale, path = strip_path(redirect_to) redirect_to = locale_url(path, locale=profile.language) request.session['django_language'] = profile.language return redirect(redirect_to) if not extra_context: extra_context = dict() extra_context['form'] = form extra_context['profile'] = profile return direct_to_template(request, template_name, extra_context=extra_context)
def reverse(viewname, urlconf=None, args=[], kwargs={}, prefix=None): locale = utils.supported_language(kwargs.pop('locale', translation.get_language())) path = django_reverse(viewname, urlconf, args, kwargs, prefix) return utils.locale_url(path, locale)
def location(self, obj): return locale_url(obj.get_absolute_url(), self.language)
def is_active(self, request, path_to_check): try: from localeurl.utils import locale_url return request.path.startswith(locale_url(path_to_check)) except ImportError: return request.path.startswith(path_to_check)
def reverse(*args, **kwargs): reverse_kwargs = kwargs.get("kwargs", {}) or {} locale = utils.supported_language(reverse_kwargs.pop("locale", translation.get_language())) url = django_reverse(*args, **kwargs) script_name, path_info = utils.strip_script_prefix(url) return utils.locale_url(path_info, locale, script_name)
def redirect_to_login(next, login_url, *args, **kwargs): if not login_url: login_url = settings.LOGIN_URL login_url = utils.locale_url(login_url, translation.get_language()) return django_redirect_to_login(next, login_url, *args, **kwargs)
def reverse(*args, **kwargs): reverse_kwargs = kwargs.get('kwargs', {}) locale = utils.supported_language(reverse_kwargs.pop('locale', translation.get_language())) path = django_reverse(*args, **kwargs) return utils.locale_url(path, locale)
def user_object_localeurl(self, user, obj): l = self.get_user_language_code(user) url = locale_url(strip_path(obj.get_absolute_url())[1], l) return url