Создание различных мнений на основе схожей (но немного отличающейся) информации?
Я знаю, что есть лучший способ сделать это, но я не могу понять его.
Я создаю веб-приложение, в котором есть ряд одинаковых страниц, в зависимости от того, какой отдел и станцию вы выбираете.
Эту информацию я использую позже в отдельном сценарии для определения места отправки файла.
Но сейчас я использую разные представления для каждой страницы.
Например, у меня есть одно представление в моем views.py, которое выглядит следующим образом:
views.py
def FOO_station_0(request):
    Site_Data.station = 0
    Site_Data.dept = "FOO"
    ctx = {}
    ctx['station'] = Site_Data.station
    if request.method == 'POST':
        form = my_form(request.POST)
        if form.is_valid():
            try:
                Ext_Data.parsed_data = form.cleaned_data['full_scan']
                saveScan()
            except IndexError:
                ctx['error_message'] = error_message
                return HttpResponseRedirect('/error/input')
            return HttpResponseRedirect(f'/confirm')
    else:
        form = my_form()
    ctx['form'] = form
    return render(request, f'scan/FOO/FOO_station.html', ctx)
И еще один, который выглядит следующим образом:
def BAR_station_2(request):
    Site_Data.station = 2
    Site_Data.dept = "BAR"
    ctx = {}
    ctx['station'] = Site_Data.station
    if request.method == 'POST':
        form = my_form(request.POST)
        if form.is_valid():
            try:
                Ext_Data.parsed_data = form.cleaned_data['full_scan']
                saveScan()
            except IndexError:
                ctx['error_message'] = error_message
                return HttpResponseRedirect('/error/input')
            return HttpResponseRedirect(f'/confirm')
    else:
        form = my_form()
    ctx['form'] = form
    return render(request, f'scan/BAR/BAR_station.html', ctx)
Как вы видите, они оба возвращают один и тот же HTML-файл, это потому, что они очень похожи, но я хочу, чтобы URL и передаваемая информация были разными.
Мне нужно сделать это для многих разных станций, у всех разные номера отделов или станций, но в остальном все будет одинаково.
Я мог бы просто добавить по одному представлению для каждой станции, но это выглядит неаккуратно.
Мой Urls.py выглядит следующим образом:
from django.urls import path
from . import views
urlpatterns = [
...
...
    path('FOO/station_0', views.FOO_station_0, name='FOO_station_0'),
    path('FOO/station_1', views.FOO_station_1, name='FOO_station_0'),
    path('FOO/station_2', views.FOO_station_2, name='FOO_station_0'),
    path('FOO/station_3', views.FOO_station_3, name='FOO_station_0'),
...
...
    path('BAR/station_1', views.BAR_station_1, name='BAR_station_1'),
    path('BAR/station_2', views.BAR_station_2, name='BAR_station_2'),
    path('BAR/station_3', views.BAR_station_3, name='BAR_station_3'),
    path('BAR/station_4', views.BAR_station_4, name='BAR_station_4'),
...
...
]
Каждая станция возвращает свой URL, потому что этот URL связан с данными, которые я хочу передать.
Не похоже, что это лучший способ сделать это, но я не знаю, с чего начать, чтобы найти лучший способ.
Какой лучший способ сделать это в Django?
Любая помощь будет очень признательна.
Помимо ответов, данных ниже, эта ссылка также была полезна для всех, кто найдет этот вопрос в будущем.
https://docs.djangoproject.com/en/3.2/intro/tutorial03/
В приведенной выше ссылке вы увидите, как захватить параметры из url, затем вы можете использовать эти параметры внутри вашего представления. Таким образом, у вас будет одно или несколько представлений, и вам не нужно будет добавлять по одному представлению для каждого url.
 Поскольку station и dept - единственные вещи, которые изменяются, вы можете добавить их в качестве аргументов функции:
def station_view(request, dept, station_num):
    Site_Data.dept = dept
    Site_Data.station = station_num
    ctx = {}
    ctx['station'] = Site_Data.station
    if request.method == 'POST':
        form = my_form(request.POST)
        if form.is_valid():
            try:
                Ext_Data.parsed_data = form.cleaned_data['full_scan']
                saveScan()
            except IndexError:
                ctx['error_message'] = error_message
                return HttpResponseRedirect('/error/input')
            return HttpResponseRedirect(f'/confirm')
    else:
        form = my_form()
    ctx['form'] = form
    # assuming dept will always be either 'FOO' or 'BAR'
    return render(request, f'scan/{dept}/{dept}_station.html', ctx)
 Затем в urls.py определите эти параметры в url, как показано ниже:
urlpatterns = [
...
    path('<dept>/station_<station_num>/', views.station_view, name='station-view'),
]
 Наконец, в шаблонах вы можете связать station и dept каждого объекта с помощью чего-то вроде следующего:
{% for obj in objects %}
    <a href="url 'station-view' dept=obj.dept station_num=obj.station">obj.name<>
{% endfor %}
PS: Я предполагаю, что имя вашего контекстного объекта objects и он фактически содержит поля dept, station и name. Подгоните его под свои нужды.