#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):
...
Пожалуйста, ознакомьтесь с документами для получения более подробной информации