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

Я создаю приложение Django. Мы хотим, чтобы пользователь перенаправлялся на новый экран при нажатии на кнопку, но мы не хотим, чтобы нам пришлось жестко кодировать URL.

У нас есть верхний экран уровня , и мы хотим перенаправлять пользователей на экраны после того, как они нажмут кнопку на экране уровня, Однако у нас есть экраны нескольких уровней, поэтому не имеет смысла жестко кодировать каждый URL для каждого раздела экрана уровня.

Вот вид для экрана первого уровня в качестве примера:

def level1(request):
    return render(request, 'Levels/level/Welcome1.html')

Как вы видите, мы выводим Welcome1.html, однако у нас есть и другие экраны приветствия, связанные с уровнем 1, например Welcome2.html и Welcome3.html.

Это URL для уровня 1:

path('levels/level1/', views.level1, name = "level1")

Опять же, не имеет смысла иметь URL для каждого уровня (уровень 1, уровень2), а затем все подэкраны для них, такие как Welcome1, Welcome2.

Как сделать так, чтобы я мог ассоциировать различные экраны с URL и не выводить их по отдельности?

Я не уверен, как решить эту проблему. Мы работаем над большим проектом и можем выделить часть бюджета тому, кто поможет решить проблему.

В Django есть "парсер", который позволяет определять динамические ссылки в urls.py

Динамический url может быть, например, способом доступа к различным изображениям в папке /media. Например: host/media/{?}. Это не то, как вы пишете это в django, но это просто для того, чтобы объяснить логику динамических урлов. В этом сценарии {?} будет означать доступ к любому файлу в папке media. Что-то вроде того, как если бы вы получали аргументы из терминального приложения.

В частности, в вашем случае, это будет выглядеть примерно так:

path('levels/level<int:num>/', views.levelHandler)

Это позволит получить любое целое число, записанное после level, и передать его в качестве аргумента в функцию levels, где вы сможете направить его на различные уровни, имеющиеся в сценарии.

Функция может выглядеть примерно так:

def levelHandler(request, num=0):
    if(num == 0): return level0(request)
    if(num == 1): return level1(request)
    ...

Это должно решить проблему. Я отредактирую ответ, если я что-то упустил. Попробуйте и расскажите мне, как все прошло

Вернуться на верх