[Django] Get admin page url

from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse

from my_project.apps.my_app.models import MyModel

...

    content_type = ContentType.objects.get_for_model(MyModel)
    url = reverse('admin:{app_label}_{model}_changelist'.format(
        app_label=content_type.app_label,
        model=content_type.model))

Other url-patterns:

'admin:index'
'admin:{app_label}_{model}_add'
'admin:{app_label}_{model}_change' choice.id

UPD, simple helper:

from django.core.urlresolvers import reverse


class AdminURLs(object):

    urls = {}

    @classmethod
    def url(cls, obj, action='change', id=None):
        """
        :param obj: model class or object
        :param action: [add|change]
        :param id: id of object to change
        """
        table = obj._meta.db_table
        key = '{table}&{action}'.format(table=table, action=action)
        if key in cls.urls:
            url = cls.urls[key]
        else:
            if hasattr(obj._meta, 'model'):
                url = reverse('admin:{app_label}_{model}_{action}'.format(
                    app_label=obj._meta.app_label,
                    model=obj._meta.model,
                    action=action.replace('change', 'changelist')))
            else:
                url = reverse('admin:{app_label}_{model}_{action}'.format(
                    app_label=obj._meta.app_label,
                    model=obj._meta.module_name,
                    action=action.replace('change', 'changelist')))
            cls.urls[key] = url
        if id:
            url = '{url}{item_id}/'.format(url=url, item_id=id)
        return url

# usage:
# url = AdminURLs.url(obj=user, action='change', id=123)
Licensed under CC BY-SA 3.0