Django - Использование диспетчеров URL на уровне сайта urls.py - PullRequest
0 голосов
/ 25 октября 2019

Я хочу сделать что-то подобное, когда у меня есть пользовательский uuid в пути каждого пользовательского приложения:

urlpatterns = [
    # URLs for all users
    path('', HomePageView.as_view(), name='home'),
    ...

    # URLs specific to a particular user
    path('<uuid:user_id>/', UserHomePageView.as_view(), name='user_home'),
    path('<uuid:user_id>/assets/', include('mysite.assets.urls', namespace='user_assets')),
    path('<uuid:user_id>/components/', include('mysite.components.urls', namespace='user_components')),
    path('<uuid:user_id>/service_requests/', include('mysite.service_requests.urls', namespace='user_service_requests')),
    ...
]

Я не уверен, как это будет работать. Будет ли UUID передаваться каждому представлению в каждом приложении?

Я искал повсюду, но не нашел примеров того, как другие делали что-то подобное.

1 Ответ

0 голосов
/ 25 октября 2019

Поскольку у ваших пользователей есть uuid, предположим, что вы переписали модель User со следующим:

# models.py
import uuid

class CustomUser(AbstractUser):
    .....
    unique_uuid = models.UUIDField(default=uuid.uuid4, unique=True)

И из корня вашего проекта вы получите:

urlpatterns = [
    path('some_app/', include('some_app.urls', namespace='some_app')),
    .....
]

Тогда внутри каждого приложения каждый URL будет иметь:

app_name = 'some_app'

urlpatterns = [
    path('<uuid:random_uuid>/', views.whatever, name='whatever'),
    .....
]

Каждое представление в этом приложении будет иметь:

def whatever(request, random_uuid):
    ....
    return render(...)

И ваши шаблоны будут передавать аргумент / поле <a href="{% url 'some_app:whatever' user.unique_uuid %}">click here</a> каждомуссылка, которая принимает его в качестве аргумента.

...