Search code examples
djangourlprefix

How can I create a django url specific to a user?


I am interested in making my urls customised for each user, something like username.mysite.com/home but I am not sure how to do this with django.

I am also curious if this might work in development (so as to have username.localhost:8000/home) or not.

Thank you.


Solution

  • There is another way as well. What you can do is have Middleware that gets the url, parses the subdomain and then renders a user profile page.

    This is assuming you are using a custom profile page and not the default profile page.

    #in yourapp.middleware
    from django.contrib.auth.models import User
    import logging
    import yourapp.views as yourappviews
    logger = logging.getLogger(__name__)
    class AccountMiddleware(object):
    
    def process_request(self, request):
        path = request.META['PATH_INFO']
        domain = request.META['HTTP_HOST']
        pieces = domain.split('.')
        username = pieces[0]
        try:
            user = User.objects.get(username=username)
            if path in ["/home","/home/"]:
                return yourappviews.user_profile(request, user.id)
    
    #In yourapp.views.py
    
    def user_profile(request,id):
        user = User.objects.get(id=id)
        return render(request, "user_profile.html", {"user": user})
    
    #In settings.py
    
    MIDDLEWARE_CLASSES = (
        #... other imports here
        'yourapp.middleware.AccountMiddleware'
    )