Skip to content

links

Source code in django_spire/contrib/admin/links.py
def admin_change_link(instance: Model | None, empty_text: str = '-') -> str:
    url = admin_change_url(instance)

    if url is None:
        return empty_text if instance is None else str(instance)

    return format_html('<a href="{}">{}</a>', url, instance)

admin_change_url

Source code in django_spire/contrib/admin/links.py
def admin_change_url(instance: Model | None) -> str | None:
    if instance is None or instance.pk is None:
        return None

    if not site.is_registered(type(instance)):
        return None

    meta = instance._meta

    return reverse(f'admin:{meta.app_label}_{meta.model_name}_change', args=[instance.pk])

admin_changelist_url

Source code in django_spire/contrib/admin/links.py
def admin_changelist_url(model_class: type[Model], **filters: str) -> str:
    meta = model_class._meta
    url = reverse(f'admin:{meta.app_label}_{meta.model_name}_changelist')

    if not filters:
        return url

    return f'{url}?{urlencode(filters)}'
Source code in django_spire/contrib/admin/links.py
def external_link(url: str, text: str, empty_text: str = '-') -> str:
    if not url:
        return empty_text

    if not is_safe_link_url(url):
        return url

    return format_html('<a href="{}" target="_blank" rel="noopener noreferrer">{}</a>', url, text)
Source code in django_spire/contrib/admin/links.py
def is_safe_link_url(url: str) -> bool:
    if url.startswith('//'):
        return False

    if url.startswith('/'):
        return True

    return urlparse(url).scheme.lower() in EXTERNAL_LINK_SCHEMES