Как создать уникальный URL-адрес для каждого пользователя в Django?

#python #django #url

Вопрос:

Я создаю сайт с помощью Django. Я хочу, чтобы у каждого пользователя был свой собственный URL-адрес, поэтому, если зарегистрируется пользователь с именем пользователя «джон», URL-адрес будет …/пользователь/джон или если зарегистрируется пользователь с именем пользователя «тим», URL-адрес будет …/пользователь/тим. Я также хочу, чтобы, когда я войду в систему под именем «тим» и введу …/пользователь/джон в поиске, я увижу страницу Джона.

Это мое urls.py файл:

 from django.contrib import admin
from django.urls import path, include
from webapp.views import welcome_page, register, user_page, settings, timeline

urlpatterns = [
    path('admin/', admin.site.urls),
    path("", welcome_page, name="welcome_page"),
    path("register/",register, name="register" ),
    path("", include("django.contrib.auth.urls"), name="login_logout"),
    path("user/",user_page, name="user_page"),
    path("settings/", settings, name="settings"),
    path("main/", timeline, name="main_timeline"),
]
 

И это мое views.py файл:

 from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
from .forms import RegisterForm
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User

def welcome_page(response):
    return render(response,"welcome.html")

def register(response):
    error = ""
    if response.method == "POST":
        form = RegisterForm(response.POST)
        if form.is_valid():
            form.save()
            return redirect("/login")

        else:
            error = form.errors

    form = RegisterForm()
    return render(response, "register/register.html", {"form":form, "error" : error})

@login_required
def user_page(response):
    username = str(User.objects.get(username=response.user.username))
    userphoto = username[0:2]
    return render(response, "user_page.html", {"userphoto": userphoto})

@login_required
def settings(response):
    return render(response, "settings.html")

@login_required
def timeline(response):
    return render(response, "timeline.html")
 

Ответ №1:

Вам нужно создать URL-адрес, который принимает a username .

urls.py

 path("user/<str:username>/",user_page, name="user_page"),
 

Теперь ваше представление принимает имя пользователя, которое передается как часть URL-адреса.

views.py

 def user_page(response, username):
    # Your view logic goes here..
 

Если вы хотите перейти на страницу других пользователей, вы можете передать их имя пользователя в URL-адресе следующим образом:

{% url 'user_page' username %}

Ответ №2:

Вам необходимо использовать параметры URL-адреса Django следующим образом

 ...
path("user/<username>",user_page, name="user_page"),
...
 

И вы перехватываете имя пользователя в своих представлениях, передавая его в качестве параметра, как показано ниже

 @login_required
def user_page(response, username):
    ...
 

Пожалуйста, ознакомьтесь с документами для получения более подробной информации