urls template example create django python-2.7 url-rewriting

template - login django



¿Cómo volver a escribir la URL base en django para agregar el nombre de usuario registrado en la url de todas las páginas en lugar del nombre de la aplicación? (1)

Estoy trabajando en la aplicación django y tengo una URL base de aplicación como la siguiente:

127.0.0.1:8000/myblog/page

donde 127.0.0.1:8000 es url base y myblog es nombre de la aplicación y la página es nombre de la página. Entonces mi requisito es cambiar la URL a algo como esto sin cambiar el código interno de mi aplicación:

127.0.0.1:8000/username/page

Básicamente quiero cambiar el nombre de la aplicación con el nombre de usuario en la URL. He intentado la solución dada en esta pregunta SO. Pero no ayudó mucho.


Puede pasar el nombre de usuario en url regexp args y obtener el usuario de request clase de request :
ver:

def user_page(request, username): try: user = User.objects.get(username=username) except User.DoesNotExists: raise Http404 # or use shortcut get_object_or_404(User, username=username) if request.user.username != user.username: raise Http404 return render(request, ''templates/user_template'', {''user'':user})

urls:

url(r''^(?<username>/w+)/page/$'', views.user_page, name=''user_page'')

Nota: el campo de username no es una opción válida; si no es único, producirá un error cuando obtenga más de un usuario de User.objects.get() . Es mejor usar el campo pk para buscar en la página del usuario.

Pero hay una forma más simple de crear una página de usuario para el usuario de la solicitud. Solo una URL sin argumentos de palabra clave, que datos de respuesta para usuarios autenticados:

ver:

def user_page(request): user = None if request.user.is_authenticated(): user = User.objects.get(pk=request.user.pk) return render(request, ''templates/user_template'', {''user'': user} )

urls:

url(r''^page/$'', views.user_page, name=''user_page'')

Ahora devuelve datos basados ​​en el usuario de la solicitud o None si el usuario no está autenticado